- •Назначение и структура платформы .Net (NetFrameWork). Виды net-приложений и их базовые концепции (Console, WinForms, wpf, asp.Net).
- •2. Управляемый и неуправляемый код. Взаимодействие с унаследованным кодом. Структура сборки net - приложения.
- •Назначение, достоинства и недостатки msil. Процесс компиляции и исполнения net – приложения.
- •Назначение и состав общей системы типов cts. Основные используемые типы в Net-приложениях.
- •Отличительные особенности сборки, пространства имен и типов. Подключение библиотечных и дополнительных пространств имен.
- •Освобождение памяти и сборка мусора net–приложений. Стратегия поколений объектов.
- •Конфигурирование net - приложений. Назначение файлов Machine.Config, App.Config, App.Exe.Config
- •Понятие и назначение делегата. Пример использования делегата в ооп на c#.
- •Понятие и назначение события. Примеры использования событий в c#.
- •Основные элементы управления WinForms-приложений. Возможности управления поведением элементов при изменении размеров формы (элементы Anchor и Dock).
- •Виды окон, используемых для приложений WinForms. Состав файлов формы и их назначение.
- •12. Списки, очереди, стеки, словари, их применение и сравнение с массивами. Интерфейс iEnumerable и его назначение
- •13. Обработка и генерация исключений. Создание собственных исключений для приложения.
- •14. Локализация WinForms-приложений. Понятие ресурсов и подчиненной сборки.
- •15. Развертывание net-приложений. Развертывание xcopy и управление встроенными каталогами. Понятие строгого имени и развертывание общих сборок.
- •16. Понятие и назначение домена приложений. Достоинства и недостатки домена по сравнению с потоками и процессами.
- •17. Основные цели, достоинства и недостатки ооп.
- •18. Понятие объекта и задач построения ис с точки зрения объектов. Назначение и структура crc-карточек.
- •1 9. Понятия инкапсуляции и абстракции, их назначение в ооп.
- •20. Назначение и структура языка uml
- •21. Отношение зависимости, ассоциации, агрегации и композиции между классами.
- •24. Базовые принципы программирования dry, kiss, yagni.
- •25. Принцип единственности ответственности и шаблон проектирования Expert.
- •26. Шаблоны проектирования High Cohesion и Low Coupling.
- •27. Шаблон проектирования Creator
- •28. Назначение модульного тестирования. Понятие единицы автономного тестирования.
- •29. Тестирование методом черного и белого ящиков и их применение к модульному тестированию.
- •30. Назначение и целесообразность использования заглушек.
- •31. Назначение подставного объекта и его отличие от заглушки.
- •34. Понятие полиморфизма и его основные виды (классический полиморфизм, перегрузка, параметрический полиморфизм).
- •35. Классический полиморфизм на основе наследования и его применение в базовых принципах проектирования.
- •36. Обоснованность применения наследования или композиции классов. Отрицательное правило наследования.
- •37. Понятие и назначение интерфейса. Отличие реализации интерфейса от наследования. Выбор предпочтения между наследованием и реализацией интерфейса.
- •38. Состав и назначение solid-принципов.
- •39. Понятие шаблона проектирования и структура шаблонов grasp.
- •40. Принцип открытости/закрытости (ocp) и его соответствие шаблонам полиморфизм и защита от изменений.
- •41. Формулировка и назначение принципа подстановки Liskov (lsv).
- •42. Назначение и структура принципа разделения интерфейсов (isp).
- •43. Назначение и структура принципа инверсии зависимостей (dip).
- •44. Формулировка, назначение и примеры использования принципа наименьшего знания (plk).
- •45. Назначение и формулировка шаблона Controller. Основные виды контроллеров и управление сложностью функционирования ис.
- •46. Назначение, формулировка и примеры использования шаблона чистая синтетика.
- •49. Назначение правила разработки тестовых случаев (test case) и тестовых комплектов
- •50. Классификация видов тестирования
37. Понятие и назначение интерфейса. Отличие реализации интерфейса от наследования. Выбор предпочтения между наследованием и реализацией интерфейса.
Определяет требования, которые некоторый класс должен реализовать, т.е. класс должен играть некоторую роль.
Интерфейс предоставляет лишь набор методов без их реализации. При реализации интерфейса, класс должен определить реализацию для каждого метода из интерфейса. Интерфейс – абстрактный класс, нельзя создавать его экземпляров (ведь нет реализаций методов).
В C# множественное наследование осуществляется за счет интерфейсов. Класс не может наследоваться от нескольких классов.
При наследовании от класса мы наследуем и реализацию методов в нем, которую, правда, можем переопределить, если данная функция объявлена как виртуальная в базовом классе.
38. Состав и назначение solid-принципов.
Эти принципы, когда применяются вместе, предназначены для повышения вероятности того, что программист создаст систему, которую будет легко поддерживать и расширять в течение долгого времени.
Принципы SOLID — это руководства, которые могут применяться во время работы над программным обеспечением для удаления «кода с запашком» предписывая программисту выполнять рефакторинг исходного кода, пока тот не станет разборчиво написанным и расширяемым. Это часть общей стратегии гибкой и адаптивной разработки.
Таким образом, мы имеем 5 принципов, которые и рассмотрим ниже:
Принцип единственной ответственности (Single responsibility) - «На каждый объект должна быть возложена одна единственная обязанность»
Принцип открытости/закрытости (Open-closed) - "программные сущности должны быть открыты для расширения, но закрыты для модификации"
Принцип подстановки Барбары Лисков (Liskov substitution) - «Объекты в программе могут быть заменены их наследниками без изменения свойств программы»
Принцип разделения интерфейса (Interface segregation) - «Много специализированных интерфейсов лучше, чем один универсальный»
Принцип инверсии зависимостей (Dependency Invertion) - «зависимости должны строится относительно абстракций, а не деталей»
39. Понятие шаблона проектирования и структура шаблонов grasp.
GRASP (общие шаблоны распределения ответственностей) — шаблоны, используемые в объектно-ориентированном проектировании для решения общих задач по назначению ответственностей классам и объектам. Представляют собой обобщенные подходы/рекомендации/принципы, используемые при проектировании дизайна системы.
В книге Крэйга Лармана «Применение UML и шаблонов проектирования» описано 9 таких шаблонов: каждый помогает решить некоторую проблему, возникающую как в объектно-ориентированном анализе. Таким образом, шаблоны «G.R.A.S.P.» — хорошо стандартизированные и проверенные временем принципы объектно-ориентированного анализа.
Аббревиатура GRASP (General Responsibility Assignment Software Patterns) означает - общие шаблоны распределения обязанностей в программных системах. На самом деле следовало бы обозначать "шаблоны GRAS", но "шаблоны GRASP" звучит лучше, так как в переводе с английского grasp это "схватывать", "постигать".
В объектно-ориентированной технологии проектирования шаблоном называют описание проблемы и ее решения, которые можно применить при разработке других систем. В идеале, шаблон должен содержать советы по поводу его применения в различных ситуациях.
Многие шаблоны содержат рекомендации по распределению обязанностей между объектами с учетом специфики задачи.
Таким образом, шаблон – это именованная пара "проблема/решение", которую можно применять в различных контекстах и которая содержит рекомендации по использованию в различных конкретных ситуациях.
Шаблоны являются основным механизмом для накопления и повторного использования полезных принципов разработки ПО.
Шаблоны не предназначены для выражения новых принципов разработки ПО, скорее, наоборот. Они призваны систематизировать существующие знания, идиомы и принципы. Чем шире они используются, тем лучше. Следовательно, шаблоны GRASP не содержат новых идей, а лишь постулируют широко используемые базовые принципы
Основные и фундаментальные вопросы проектирования описывают следующие шаблоны GRASP.
«Эксперт» (Expert);
«Слабая связанность» (Low Coupling);
«Высокое зацепление» (High Cohesion);
«Создатель» (Creator);
«Контроллер» (Controller);
«Полиморфизм» (Polymorphism); - Шаблон полиморфизм позволяет обрабатывать альтернативные варианты поведения на основе типа. При этом, альтернативные реализации приводятся к обобщенному интерфейсу.
«Чистая синтетика» (Pure Fabrication);
«Перенаправление» (Indirection); - Шаблон перенаправление реализует низкую связность между классами, путем назначения обязанностей по их взаимодействию дополнительному объекту — посреднику.
«Защита от изменений» (Protected Variations); - Проблема модификации системы наиболее актуальна в условиях динамически изменяющихся требований. Зачастую, удается выделить т.н. точки неустойчивости системы, которые наиболее часто будут подвержены изменению/модификации. Тогда, сущность шаблона устойчивый к изменениям заключается в устранении точек неустойчивости, путем определения их в качестве интерфейсов и реализации для них различных вариантов поведения.