Понятие класса

В системе обычно функционирует множество объектов. Некоторые из них «похожи» или однотипны. Однотипные объекты объединяются в классы. Понятие класса позволяет существенно упростить разработку и реализацию системы. Все объекты одного и того же класса обладают одинаковым интерфейсом и реализуют этот интерфейс одним и тем же способом. Два объекта одного класса могут отличаться только текущим состоянием, причем всегда теоретически возможно так изменить состояние одного объекта, чтобы он стал равным другому объекту.

Индивидуальные объекты называются экземплярами класса, а класс – это шаблон, по которому строятся объекты. Термины «объект» и «экземпляр» эквивалентны.

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

Интерфейс класса можно разделить на три части:

  • открытую (public) – видимую всем классам;
  • защищенную (proteted) – видимую самому классу, его подклассам и друзьям  (friends);
  • закрытую (private) – видимую только самому классу и его друзьям.

Отношения между классами.

Классы как и объекты не существуют изолировано.

Виды отношений:

  • ассоциация (смысловая связь: один – к – одному; один – ко – многим; многте – ко – многим;);
  • наследование – это такое отношение, когда один класс повторяет структуру и поведение другого класса (одиночное наследование) или других классов (множественное наследование). 

Пример: библиотечная система.

Предположим, мы разрабатываем библиотечную систему. Одним из объектов в этой системе будет читатель. Читатель характеризуется своим именем и списком книг, взятых в библиотеке. Читатель может сдать книгу или взять новую. В такой модели объект читатель имеет состояние, состоящее из двух атрибутов — имя (неизменяемое) и список книг (из­меняемый) — и две операции — сдать и взять. Операции соответственно изменяют список книг у данного читателя.

Целиком система будет состоять из множества объектов: читатели, книги, хранилище, библиотекарь и т.д. Эти объекты взаимодействуют ме­жду собой, посылая друг другу сообщения. Например, читатель может получить сообщение о необходимости сдать книгу (поскольку подходит к концу срок, на который она выдана), и в ответ он выполнит операцию "сдать". Другим примером сообщения может быть вопрос библиотекаря к читателю: "Как Вас зовут?". Чтобы правильно отреагировать на такое со­общение, объекту "читатель" необходимо иметь операцию "назвать свое имя".

В системе обычно функционируют множество объектов одного класса. Читатели Иванов, Петров и Сидоров — экземпляры класса "читатель". Все экземпляры одного и того же класса имеют один и тот же набор операций и могут реагировать на одни и те же сообщения. Класс иногда называют типом объектов.

Класс могут наследовать свойства других классов. В нашем при­мере два класса: библиотекарь и читатель — имеют общее. Они являются людьми, т.е. они принадлежат к классу "человек". Атрибут "имя" и опера­ция "сказать свое имя" — свойства человека. Эти свойства унаследованы классами библиотекарь и читатель от класса "человек".

Предположим, что нашей библиотекой пользуются студенты и пре­подаватели университета, при этом у них немного разные права. Напри­мер, преподаватели могут одновременно брать больше книг, чем студен­ты. В рамках объектной модели этот факт можно отобразить следующим образом: введем два класса — "читатель-преподаватель" и "читатель-студент". Они наследуют (являются подклассами, или выведены из) клас­са "читатель". У них общий интерфейс — набор операций — однако дей­ствия при выполнении этих операций могут быть различны. Кроме того, при дальнейшей разработке системы нам понадобятся различные опера­ции или атрибуты для студентов и преподавателей.

Таким образом классы образуют иерархию, показанную на рисунке.

 

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

Различие операций "Взять" и "Вернуть" в классах "профессор" и "студент" иллюстрирует еще одно важное свойство объектной модели — полиморфизм. Полиморфизм позволяет работать с неким объектом, не зная конкретного класса, к которому этот объект относится. Для того, чтобы послать сообщение "сдать" нам не важно, кем является данный читатель — студентом или преподавателем. Однако сама операция сдачи книг будет происходить по-разному в зависимости, кто именно этот чита­тель.

Четверг, 09.05.2024, 01:47
Приветствую Вас Гость