Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Дублированный код


Автор: Hohhi 31.1.2011, 21:19
Привет всем! Пусть имеется ООП класс, разделенный на единицы: методы, параметры, тела методов, свойства и т.д. Подскажите, какой алгоритм на Ваш взгляд является самым эффективным в данном случае? Даже более интересует полнота находимой дублированности, в том числе семантической.

Автор: skyboy 31.1.2011, 23:02
Цитата(Hohhi @  31.1.2011,  20:19 Найти цитируемый пост)
какой алгоритм на Ваш взгляд является самым эффективным в данном случае?

алгоритм чего? разделения кода на семантические единицы? тут все должно начинаться с анализа, очень рекомендуется именно объектно-ориентированный. Затем идет проектирование(тоже объектно-ориентированное). в итоге, к моменту написанию кода(объектно-ориентированному программированию) ты уже знаешь, какие модули(классы и иерархии классов) тебе нужны. все что остается, при помощи собственных велосипедов или общепринятых методик — т.н. шаблонов(patterns) программирования оптимизировать эти самые модули(к примеру, используя паттерн http://ru.wikipedia.org/wiki/Proxy_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29 для откладывания ресурсоемких операций или http://ru.wikipedia.org/wiki/%D0%A1%D1%82%D1%80%D0%B0%D1%82%D0%B5%D0%B3%D0%B8%D1%8F_%28%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29, для вынесения схожей алгоритмической части из несвязанных классов)

Добавлено через 18 секунд
впрочем, пожалуй, использование паттернов уместнее на этапе проектирования.

Автор: Hohhi 31.1.2011, 23:23
skyboy, имелось в виду несколько другой вопрос, а именно на вики перечислены некоторые алгоритмы:
Цитата

A number of different algorithms have been proposed to detect duplicate code. For example:
Baker's algorithm.[2]
Rabin–Karp string search algorithm.
Using Abstract Syntax Trees.[3]
Visual clone detection.[4]


Хотелось бы узнать мнение о них, а также выслушать предложения о чем-то более приемлимом

Добавлено через 7 минут и 58 секунд
Цитата

алгоритм чего? 


Алгоритм поиска дублированного кода

Автор: _Y_ 31.1.2011, 23:35
Цитата(Hohhi @  31.1.2011,  21:19 Найти цитируемый пост)
 ООП класс, разделенный на единицы: методы, параметры, тела методов, свойства 

А чем отличаются параметры от свойств? И что сравнивать в методах, если тела методов это единицы отдельные от самих методов?

Автор: Hohhi 1.2.2011, 00:09
Цитата

А чем отличаются параметры от свойств? 


Параметры метода, свойства класса

Автор: skyboy 1.2.2011, 02:06
ты изучаешь вопрос с теоретической точки зрения? или с практической? пишешь собственный анализатор?

Автор: Hohhi 1.2.2011, 08:18
skyboy, я хочу написать анализатор над .NET кодом. Пока что я создаю гибкую систему динамического подключения сборок с так называемыми "плохими запахами" кода. Этот запах представляется мне трудно локализовать

Автор: _Y_ 1.2.2011, 11:12
Цитата(Hohhi @ 1.2.2011,  00:09)
Цитата
чем отличаются параметры от свойств?
Параметры метода, свойства класса

При этом задача стоит:
Цитата(Hohhi @  31.1.2011,  21:19 Найти цитируемый пост)
интересует полнота находимой дублированности


Зачем сравнивать списки параметров?
  • Если одинаковые параметры принадлежат методам с разными именами, никакой дублированности не наблюдается. Ситуация вполне законная т.к. методы должны различаться кодом.
  • Если одинаковые параметры принадлежат методам с одинаковыми именами, пронадлежащим разным классам - тоже никакой дублированности по той же причине.
  • Если одинаковые параметры принадлежат методам с одинаковыми именами, пронадлежащим одному классу, ошибка выдается еще на стадии разработки.
Непонятно зачем сравнивать списки параметров. 

Впрочем, есть один случай. Это если параметр имеет то же имя, что и свойство. Тогда параметр делет это имя локальным для данного метода. Многие языки это позволяют.

Из чисто детского любопытства - зачем еще это может быть надо?

Автор: Hohhi 1.2.2011, 13:15
_Y_, Функционал перечисленный можно выдернуть "AS IS" из DTE Visual Studio. Меня при создании темы интересовали именно алгоритмы поиска дублированного кода: все равно в чем: псевдокод, другие структуры данных, интересует, как это оптимальнее организовать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)