- •1.Объектно-ориентированные методы. Дайте определение объектно-ориентированного программирования, объектно-ориентированного проектирования и объектно-ориентированного анализа.
- •2. Сфера применения, преимущества и недостатки объектных методов.
- •3. Эволюция объектно-ориентированных языков программирования.
- •4. Эволюция методов объектно-ориентированного проектирования.
- •5. Объект как фундаментальное понятие объектно-ориентированных методов. Дайте определение состояния, поведения и уникальной идентичности объектов.
- •6. Уникальная идентичность объектов. Идентичность объектов Вселенной. Идентичность объектов в объектно-ориентированных моделях. Примеры.
- •7. Понятие класса в объектно-ориентированных методах. Дайте определение поведения и структуры класса. Понятие контракта и реализации класса. Обозначение класса в uml. Примеры.
- •17. Понятие полиморфизма. Классификация типов полиморфизма по Вегнеру.
- •25. Наследование интерфейсов. Преимущества и недостатки. Объясните реализацию интерфейсов на примере интерфейса iAny:
- •26 Сравнение абстрактных классов и интерейсов:
- •27 Принцип подстановки Барбары Лисков. «Правильное» построение иерархий классов:
- •28 Сравнение иерархий агрегации (is part of) и наследования (is kind of):
- •29 Делегирование методов (функциональный подход) и паттерн проектирования «Шаблонный метод»:
- •Применимость
- •30 Принцип инверсии управления в проектировании классов (IoC – Inversion of Control):
- •Управление доступом к членам класса. Члены-данные и члены-функции класса. Доступ к элементам класса. Синтаксис. Пример.
- •Специальные члены-функции класса. Синтаксис. Пример.
- •37. Конструктор класса. Виды конструкторов. Синтаксис. Пример.
- •38. Деструктор класса. Правила написания деструктора. Синтаксис. Пример.
- •39. Друзья класса. Дружественные функции и классы. Правила относительно друзей. Пример.
- •40. Оператор присваивания. Назначение. Синтаксис. Пример.
- •43. Статические (static) члены класса. Назначение. Синтаксис. Пример.
- •Проектирование классов с методами без побочных эффектов.
- •Проектирование по контракту: пред и постусловия, инвариант класса.
- •Понятие метаклассов.Поддержка метаклассов в различных языках программирования.
3. Эволюция объектно-ориентированных языков программирования.
Вегнер сгруппировал некоторые из наиболее известных языков высокого уровня в четыре поколения в зависимости от того, какие языковые конструкции впервые в них появились:
Simula 67, Pascal. Моделирование дискретных событий, абстрактные данные.
Smalltalk – «абсолютное воплощение объектно-ориентированного идеала». Smalltalk 80, Smalltalk V.
C++. Параметризованные типы.
Java, C#. Сборка мусора. Библиотеки объектов.
В каждом следующем поколении менялись поддерживаемые языками механизмы абстракции. Такие языки, как Simula 67, были созданы для упрощения программирования математических формул, чтобы освободить программиста от трудностей ассемблера и машинного кода. Также главной задачей стало инструктировать машину, что делать: сначала прочти эти анкеты сотрудников, затем отсортируй их и выведи результаты на печать. Появилась возможность решать все более сложные задачи, но это требовало умения обрабатывать самые разнообразные типы данных, т.е абстрактные данные. Такие языки как Pascal стали поддерживать абстракцию данных. Программисты смогли описывать свои собственные типы данных.
70-е годы знаменовались безумным всплеском активности: было создано около двух тысяч различных языков и их диалектов. Неадекватность более ранних языков при написании крупных программных систем стала очевидной, поэтому новые языки имели механизмы, устраняющие это ограничение. Таким образом, мы получили языки Smalltalk (переработанное наследие Simula), Ada (Pascal с элементами Simula, Alphard и CLU), C++ (возникший от брака С и Simula) и Eiffel (произошел от Simula и Ada). Наибольший интерес для дальнейшего изложения представляет класс языков, называемых объектными и объектно-ориентированными/
Третье и четвертое поколение – дальнейшее развитие объектных методов.
4. Эволюция методов объектно-ориентированного проектирования.
Метод Буча (1980): Метод Буча является техникой объектного проектирования и дополнен элементами объектного анализа. Метод Буча использует логическую модель (класс и объектная структура) и физическую модель (модуль и архитектура процесса), включая как статические, так и динамические компоненты, в ней применяются многочисленные графические символы.
Методы Кода, OMT, OOSE, ROD (1990):
Методика объектного анализа. Базируется на выделении классов и объектов. Она включает в себя пять этапов: поиск классов и объектов, исходя из предметной области и на основе анализа функций системы, идентификация структур путем поиска отношений "обобщение-специализация" и "общее-частное", определение "субъектов" (групп класс-объект), определение атрибутов; определение сервисов.
Метод OMT (Object Modeling Technique) объединяет концепции объектной технологии и моделирования, основываясь на понятии "сущность-отношение" (entity-relation). Метод включает статическую и динамическую модели. Статическая модель базируется на концепциях класса, атрибута, операции, отношения и агрегирования, динамическая - на основе диаграмм "событие-состояние" позволяет дать абстрактное описание предполагаемого поведения системы.
Метод OOSE (Object-Oriented Software Engineering), также известный как метод Jacobson, основан на использовании сценариев для выявления классов. Рассматривается пять моделей сценариев: доменная модель исходной области приложения и четыре модели этапов разработки - анализа, проектирования, реализации, тестирования.
Метод OOIE (Object-Oriented Information Engineering) разделяется на две части. В первой части анализируется объектная структура, идентифицируются типы объектов, их состав, отношения наследования. Вторая часть анализирует поведение объектов, определяемое динамической моделью, учитывающей состояния объектов и события, которые могут изменить эти состояния.
Нотация UML (1997): объединяет в себе методы Буча, Якобсона и OMT. Нотация использует объектно-ориентированные методы. Моделирование в данной нотации позволяет последовательно пройти концептуальный, логический и физический уровни моделирования систем.
