2. Создайте с помощью диаграммы взаимодействия сценарий для организации из
упражнения 1.
3. Для типичной карточной игры опишите программную систему, которая будет
взаимодействовать с пользователем в качестве противоположного партнера.
Типичные компоненты должны включать игровой стол и колоду карт.
4. Опишите программную систему для управления ATM (Automatic Teller Machine).
Поскольку слово Teller достаточно многозначно (рассказчик, счетчик голосов при
выборах, кассир в банке, диктор радиолокационной станции ПВО и т. д.), то у вас
имеется большая свобода в выборе предназначения этой машины. Приведите
диаграммы взаимодействия для различных сценариев использования этой машины.
Глава 3 : Классы и методы
Хотя термины, которые используются в объектно-ориентированных языках, отличаются,
понятия классов, экземпляров, пересылки сообщений, методов и наследования являются
общими. Эти термины были введены в главе 1. Как уже отмечалось, использование
различных терминов для одних и тех же понятий широко распространено в объектно-
ориентированных языках. Мы будем применять единую и, как мы надеемся, ясную
терминологию для всех языков программирования. В вводных разделах будем отмечать
специфику конкретных языков и различные синонимы для наших терминов. Обращайтесь
к разделу "Глоссарий" за разъяснением незнакомых понятий.
В этой главе речь идет о статических атрибутах классов; в главе 4 мы рассмотрим их
динамическое использование. Здесь же мы проиллюстрируем механизмы объявления
класса и определения методов. В главе 4 объясняется, как создаются экземпляры класса и
как им передаются сообщения. Мы отложим анализ механизмов наследования до главы 7.
Важный момент, который необходимо прояснить, — различие между объявлением класса
или объекта и его порождением. В первом случае (который является темой этой главы)
просто указывается тип данных. Объявление характеризует объект (внутренние
переменные, типы поведения), но само по себе не создает новых данных. Порождение, то
есть создание новых экземпляров класса, может рассматриваться как разновидность
объявления переменной и будет являться темой следующей главы. Различие между этими
двумя понятиями отчасти маскируется тем фактом, что в языках с контролем типов
данных (таких, как C++) определение, порождающее переменную, выглядит так же, как и
чистое объявление.
3.1. Инкапсуляция
В главе1 мы заметили, что объектно-ориентированное программирование и, в
особенности, объекты могут рассматриваться со многих точек зрения. В этой главе мы
будем представлять себе объекты как абстрактные типы данных.
В программировании, основанном на абстракции данных, информация сознательно
прячется в небольшой части программы. В частности, каждый объект из набора
абстрактных типов данных, разрабатываемого программистом, имеет два "лица". Это
аналогично дихотомии принципов Парнаса, которые обсуждались в главе 2. С внешней
точки зрения (клиента или пользователя) абстрактный тип данных представляет собой
всего лишь совокупность операций, которые определяют поведение абстракций. С
PDF created with pdfFactory Pro trial version www.pdffactory.com