ТОП 10:

Что понимается под качеством исходного кода?



 

Можно трактовать

в узком смысле (соответствие стандартам кодирования, наличие комментариев и т.д.)

в широком смысле (с учетом архитектуры системы)

Качество в широком смысле важнее

3. Перечислите желательные внутренние характеристики проекта (т.е. внутренние факторы качества исходного кода)?

 

§ (Внутренний) дизайн программной системы можно определить как совокупность свойств системы, определяющих ее внутреннее качество

единство дизайна

используемые технологии

качество кода

документация и т.д.

4. Приведите примеры типичных неправильных архитектурных решений в исходном коде.

 

§ Дублирование кода

§ Глобальные локальные переменные

§ Работа с глобальными переменными вместо передачи параметров в функции (характерно для процедурного подхода)

§ Неоправданно тесная связь единиц программы (методов, модулей и т.д.)

В программа, в которой Form2 читает свойства компонентов Form3, и меняет значения глобальных переменных в модуле, описывающем Form1, начисто лишена какой-либо архитектуры (попросту «каша»)

Подобную программу в большинстве случаев невозможно сопровождать (проще и дешевле выкинуть и написать новую)

Отсутствие разделения логики и отображения

Например, код в обработчике события по нажатию кнопки, показывает диалог выбора файла, проверяет корректность выбранного имени файла, производит обработку данных файла, результат обработки показывает на форме, и все это без делегирования функциональности другим частям программы) и т.д.

Желательные характеристики проекта

 

Минимальная сложность (интегральная характеристика)

Простота сопровождения (программы давно уже пишут для людей, а не машин)

Слабое сопряжение (минимальное число соединений между различными частями программы)

Расширяемость (возможность расширять/улучшать систему не затрагивая ее основную структуру)

Повторное использование кода (устранения любых дублирований кода)

Высокий коэффициент объединения по выходу (к конкретному классу обращается большое число других классов)

Низкий или средний коэффициент разветвления по входу (конкретный класс обращается с малым числом других классов)

Портируемость (простота адаптирования системы к другой среде)

Минимальная, но полная функциональность

Стратификация (разделение уровней декомпозиции, позволяющее изучить систему на любом уровне, не потеряв при этом согласованное ее представление; проще говоря – разделение по уровням)

Соответствие стандартным методикам

Для чего нужны/используются паттерны проектирования?

 

Есть стандартные решения для определенных задач – паттерны проектирования.

§ Паттерны проектирования – описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте @ GoF

Предложены хорошими специалистами

Проверены временем

Составляют удобный словарь для общения

Дайте определение паттернам проектирования.

 

Паттерны проектирования - стандартные решения для определенных задач.

§ Паттерны проектирования – описание взаимодействия объектов и классов, адаптированных для решения общей задачи проектирования в конкретном контексте @ GoF

§ Под классическими паттернами проектирования понимаются повторяющиеся элементы дизайна приложений для объектно-ориентированных языков программирования со статической типизацией (С++, C#, Java, Object Pascal и др.)

Перечислите и дайте краткую характеристику основным элементам паттерна в понимании GoF.

 

Канонические паттерны - GoF-паттерны.

§ Имя

Как устоявшийся профессиональный термин может использоваться для четкого описания архитектурного решения в документации, при обсуждении с коллегами и т.п. Присваивание паттернам имен позволяет в дальнейшем проектировать на более высоком уровне абстракции.

§ Задача

Описание того, когда следует применять тот или иной паттерн. В задаче может описываться конкретная проблема проектирования, например, способ представления алгоритмов в виде объектов. В задаче может отмечаться, какие структуры классов или объектов свидетельствуют о негибком дизайне, также может приводится перечень условий, при которых имеет смысл применять данный паттерн.

§ Решение

Описание элементов дизайна, отношений между ними, функций каждого элемента. Речь идет не о конкретном дизайне или реализации для конкретной задачи, а о шаблоне решения, применимом в различных, но схожих ситуациях.

§ Результаты

Следствия применения паттерна и разного рода компромиссы. Описание результатов позволяет оценить преимущества и недостатки того или иного паттерна и выбрать решение между различными вариантами дизайна.

Описание паттерна (GoF)

 

Название и классификация паттерна

Назначение

Известен также под именем

Мотивация

Применимость

Структура

Участники

Отношения

Результаты

Реализация

Пример кода

Известные применения

Родственные паттерны

Какие существуют основные механизмы повторного использования в объектно-ориентированном программировании?

 

Наследование («прозрачный ящик»)

Наследование класса определяется статически на этапе компиляции

Нарушение инкапсуляции родителя для потомков

Тесная связь родителя и потомков

Нельзя изменить унаследованную от родителя реализацию во время выполнения программы

Композиция («черный ящик»)

Композиция объектов – это альтернатива наследованию класса

Для композиции требуется, чтобы объединяемые объекты имели четко определенные интерфейсы

Композиция объектов определяется динамически во время выполнения, следовательно, реализация может меняться во время выполнения

Композиция объектов в большинстве случаев предпочтительнее наследованию классов

Обобщенное программирование

 

Классификация GoF-паттернов

 

§ Порождающие паттерны

ú Отвечают за создание объектов

§ Структурные паттерны

ú Организуют структуру классов (на этапе разработки) или объектов (на этапе выполнения программы)

§ Паттерны поведения

ú Характеризуют, как классы и объекты взаимодействуют между собой

Перечислите порождающие GoF-паттерны проектирования.

 

1) Фабричный метод (Factory Method)

2) Абстрактная фабрика (Abstract Factory)

3) Прототип (Prototype)

4) Строитель (Builder)

5) Одиночка (Singleton)

Перечислите структурные GoF-паттерны проектирования.

 

1) Адаптер (Adapter)

2) Декоратор (Decorator)

3) Заместитель (Proxy)

4) Компоновщик (Composite)

5) Мост (Bridge)

6) Приспособленец (Flyweight)

7) Фасад (Facade)

Перечислите поведенческие GoF-паттерны проектирования.

 

1) Интерпретатор (Interpreter)

2) Итератор (Iterator)

3) Команда (Command)

4) Наблюдатель (Observer)

5) Посетитель (Visitor)

6) Посредник (Mediator)

7) Состояние (State)

8) Хранитель (Memento)

9) Цепочка обязанностей (Chain of Responsibility)

10) Шаблонный метод (Template Method)

 

Приведите возможные отрицательные последствия использования паттернов.

 

//мое мнение

Два момента:

1. При использовании паттернов может возникнуть усложнение архитектуры, или порождение сложностей при внесении определенных изменений. Например:

- при использовании Фабричного метода - возникает дополнительный уровень подклассов

- использование Абстрактной фабрики - фиксирует набор объектов, которые можно создать. Расширение "Абстрактной фабрики" для изготовления новых объектов часто затруднительно

(некоторые отрицательные моменты можно найти в использовании почти любого паттерна)

 

2. Если программист не имеет достаточного опыта проектирования, он может выбирать неверные паттерны для решения задачи, или использовать их там, где их использование не было оправдано. Это опять же усложняет написание и понимание архитектуры приложения

OMT, описание классов

 

§ Класс обозначается прямоугольником

§ В верхней части напечатано имя класса

§ Описание переменных располагается ниже описания методов

§ Можно ставить имя типа перед методом, переменной экземпляра или фактического параметра

§ Курсивом в имени обозначаются абстрактные классы (соответственно и интерфейсы) и методы

§ При описании паттернов проектирования бледным шрифтом часто обозначают клиентов, которые не входят в состав участников паттерна







Последнее изменение этой страницы: 2016-08-14; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.235.66.217 (0.01 с.)