- •Назначение и структура платформы .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. Классификация видов тестирования
24. Базовые принципы программирования dry, kiss, yagni.
DRY – Don’t repeat yourself (не повторяй себя). Любой функционал в коде должен быть реализован ровно один раз, не говоря уже о том, что copy-paste-кода вообще не должно быть.
KISS – keep it simple stupid (делайте вещи проще). Не нужно усложнять дизайн там, где в этом нет необходимости. Чем проще, тем лучше. В сложном коде сложнее искать ошибки и в дальнейшем его модернизировать.
YAGNI - You Ain’t Gonna Need It — вам это не понадобится! Его суть в том, чтобы реализовать только поставленные задачи и отказаться от избыточного функционала.
25. Принцип единственности ответственности и шаблон проектирования Expert.
Принцип единственной ответственности гласит — «На каждый объект должна быть возложена одна единственная обязанность». Т.е. другими словами — конкретный класс должен решать конкретную задачу — ни больше, ни меньше.
Информационный эксперт (Information Expert). Ответственность должна быть назначена тому, кто владеет максимумом необходимой информации для исполнения — информационному эксперту.
Проблема: каков наиболее общий принцип распределения обязанностей между объектами при объектно-ориентированном проектировании?
Решение: назначить обязанность информационному эксперту – классу, у которого имеется информация, требуемая для выполнения данной обязанности.
Достоинства:
шаблон «Эксперт» поддерживает инкапсуляцию. Для выполнения требуемых задач объекты используют собственные данные. Подобную возможность обеспечивает также шаблон «Слабая связанность», применение которого приводит к созданию более надежных и приспособленных к обслуживанию систем;
нужное поведение системы обеспечивается несколькими классами, содержащими требуемую информацию. Это приводит к определениям классов, которые гораздо проще понимать и поддерживать. Кроме того, поддерживается шаблон «Сильное зацепление».
26. Шаблоны проектирования High Cohesion и Low Coupling.
Мера связности модулей определяется количеством информации, которой располагает один модуль о природе другого.
«Слабая» связность» и Low Coupling — распределение ответственностей и данных, обеспечивающее взаимную независимость классов. Класс со «слабой» связностью:
Не зависит от внешних изменений;
Прост для повторного использования.
Мера зацепления модуля определяется степенью сфокусированности его обязанностей.
Высокое зацепление - High Cohesion твердит, что класс должен стараться выполнять как можно меньше не специфичных для него задач, и иметь вполне определенную область применения.
Проблема: степень связанности – это способ измерения того, насколько жестко один класс связан с другими классами либо каким количеством данных о других классах он обладает. Класс с низкой степенью связанности (или слабым связыванием) зависит от небольшого числа других классов. Выражение "небольшого числа" зависит от контекста и сложности проектируемой системы.
Решение: Распределить обязанности таким образом, чтобы степень связанности оставалась низкой.
Класс с высокой степенью связанности (или жестко связанный) зависит от множества других классов. Наличие таких классов нежелательно, поскольку оно приводит к возникновению следующих проблем:
изменения в связанных классах приводят к изменениям в данном классе;
затрудняется понимание каждого класса в отдельности;
усложняется повторное использование, поскольку для этого требуется дополнительный анализ классов, с которыми связан данный класс.
Шаблон «Слабая связанность» подразумевает такое распределение обязанностей, которое не влечет за собой чрезмерного повышения степени связывания, приводящего к отрицательным результатам.
Шаблон «Слабая связанность» поддерживает независимость классов, что повышает возможности повторного использования и обеспечивает более высокую эффективность приложения.
Достоинства:
изменения компонентов мало сказываются на других объектах;
принципы работы и функции компонентов можно понять, не изучая другие объекты;
повышается удобство повторного использования
Высокое зацепление
Проблема: как обеспечить возможность управления сложностью?
В терминах объектно-ориентированного проектирования зацепление (более точно, функциональное зацепление) – это мера связанности и родственности обязанностей класса.
Считается, что класс обладает высокой степенью зацепления, если его обязанности тесно связаны между собой, т.е. являются родственными, и он не выполняет работ непомерных объемов.
Класс с низкой степенью зацепления выполняет много разнородных функций или несвязанных между собой обязанностей. Такие классы создавать нежелательно, поскольку они приводят к возникновению следующих проблем:
трудность в понимании;
сложности при повторном использовании;
сложности в поддержке;
ненадежность и постоянная подверженность изменениям.
Классы со слабым зацеплением, как правило, являются слишком "абстрактными" или выполняют обязанности, которые можно с легкостью распределить между другими объектами.
Решение: распределение обязанностей, поддерживающее высокую степень зацепления.
Достоинства:
повышаются ясность и простота проектных решений;
упрощаются поддержка и доработка;
как правило, обеспечивается слабое связывание;
улучшаются возможности повторного использования, поскольку класс с высокой степенью зацепления выполняет конкретную задачу.