
- •Тема 1.2. Об'єктна модель предметного середовища, принципи її побудови. Поняття об'єктів і класів та їх взаємовідносин
- •1. Поняття «Об'єктна модель предметного середовища». Порівнева конкретизація моделі. Конкретизація даних.
- •Что такое «Объектная модель» в ооп?
- •2. Взаємодія об’єктів. Конкретизація алгоритмів і міжоб’єктних зв’язків.
- •3. Поняття алгоритмів і даних в інтерпретації об’єктної моделі.
- •4. Принципи побудови об’єктної моделі.
- •5. Поняття класу. Типи даних і класи. Что такое «Класс» в ооп?
- •2. Відношення між класами, елементи (структура) класу, ієрархія класів.
- •3. Об’єкт, як представник класу.
- •4. Парадигми ооп: абстракція, інкапсуляція, спадкування, поліморфізм. Что является предметом абстрагирования в ооп?
- •Что понимается под наследованием в ооп?
- •В чем проявляется полиморфизм классов?
- •В чем особенности абстракции и инкапсуляции в ооп
5. Поняття класу. Типи даних і класи. Что такое «Класс» в ооп?
Класс — это расширение понятия «тип данных». Он характеризует множество объектов, имеющих одинаковую структуру, и служит для объявления типа этих объектов в программе.
К
ласс
может включать
в свою структуру объявления
переменных и функций.
Переменные могут быть как обычными
переменными базовых или пользовательских
типов, так и объектами того же или других
классов.
Кроме объявления объектов, классы могут служить «родителями» для описания на их основе новых (производных) классов. Пример иерархии наследования показан выше.
На графическом языке моделирования UML классы изображаются в виде прямоугольников с тремя областями: Имя класса, атрибуты (поля класса) и операции (методы класса).
2. Відношення між класами, елементи (структура) класу, ієрархія класів.
Из сказанного выше следуют такие отношения между классами:
1. Наследование. Класс А является потомком класса Б. Заметим, что класс Б не знает, что у него есть классы-наследники.
2. Композиция (Включение). Класс А включает в себя переменные – объекты класса Б. Заметим, что класс Б не знает, что порожденные им объекты куда-либо включены.
3. Агрегация (Использование). Класс А ссылается на объекты класса Б, использует значения переменных, констант, перечислений из класса Б, изменяет переменные из класса Б, вызывает функции (методы) класса Б, не включая в себя объекты этого класса. Заметим, что класс Б не знает, кем его элементы используются, однако может контролировать вызовы функций и изменение значений переменных.
Далее будет показано, как эти отношения изображаются на языке UML.
Все эти отношения устанавливаются при программировании класса А. Но интересен вопрос, на каком этапе эти отношения реализуются?
Наследование есть отношение класс-класс, порождение нового класса реализуется в момент компиляции.
Композиция и агрегация, по сути, есть отношение между классом и объектом, а объект порождается на этапе выполнения программы.
3. Об’єкт, як представник класу.
Класс есть более «продвинутый» тип данных. Объекты, суть переменные типа «Класс». Но если в обычных переменных мы имеем дело только с их значениями, то в объектах важно не только значение полей (состояние объекта) но и его функциональность. Другими словами, что могут делать описанные в нем функции (методы). Естественно, что во всех экземплярах объектов одного и того же класса функций одни и те же. Они не дублируются в памяти каждый раз, как только создается новый объект этого класса. Просто все экземпляры одинаковых объектов ссылаются на один и тот же программный код, хотя под значения данных для каждого экземпляра выделяется своя память.
Поэтому объект правильнее называть не экземпляром класса (класс не дублируется), а представителем класса (представляет его функциональность).
4. Парадигми ооп: абстракція, інкапсуляція, спадкування, поліморфізм. Что является предметом абстрагирования в ооп?
(Здесь и далее текст, выделенный серым фоном, цитируется из файла BorlandCPPBuilder5.chm)
Существуют разные подходы к программированию. Любому из них присущ свой собственный способ абстрагирования сущностей, с которыми он работает. Так, процедурно-ориентированный подход оперирует абстракцией алгоритма. С, кстати, — типичный процедурный язык, хотя на нем возможно писать программы, напоминающие по стилю объектно-ориентированные. Логико-ориентированный имеет в виду цели, выражаемые на языке логических предикатов (таков язык Prolog). Наконец, объектно-ориентированное программирование абстрагирует классы и объекты. В чем же состоит его суть?
Известный теоретик Грейди Буч так определяет этот подход:
“Объектно-ориентированное программирование — это методология программирования, основанная на организации программы в виде совокупности объектов, каждый из которых является представителем определенного класса, а классы образуют иерархию наследования.”
Примечание
В “строго” объектно-ориентированных языках объектами (или их составными частями) являются решительно все элементы программы, в том числе она сама. В языке Java, например. Язык C++ таковым, кстати, не является хотя бы потому, что он сохраняет все возможности процедурного языка С. В C++ можно создать, например, совершенно отдельно стоящую глобальную переменную, да и сама функция main() — совершенно “внеклассовая”. Такая универсальность C++ может быть как преимуществом, так и недостатком, если ею злоупотреблять. У программиста, впервые применяющего объектный подход, всегда имеется тенденция мыслить старыми, процедурными категориями.
Итак, центральным элементом абстракции объектно-ориентированной методологии является, очевидно, объект.