Цель первого этапа ООП — перечислить понятия предметной области и определить, которые из них образуют классы, а которые объекты, методы и поля. Перечисление и первичная классификация обычно не вызывают затруднений, но дают материал для дальнейшего анализа.
Наш проект связан с двумя предметными областями — научными конференциями и электронной почтой. Приведем возможный вариант их предварительного рассмотрения.
Каждый, кто может получать и посылать сообщения является абонентом сети. У каждого сообщения имеется автор и дата отправки. Конференции обслуживаются Диспетчерским Центром (сервером), который хранит доклады и, отвечая на запросы, предоставляет участникам необходимую информацию. Конференция имеет название, лидеров дискуссии, аннотацию и включает посланные на нее доклады. Каждый доклад имеет название, автора, дату и текст. Открытию конференции предшествует объявление, которое должно привлечь внимание потенциальных участников. Участники могут получать сведения о действующих и объявления о предстоящих конференциях, а так же посылать и получать отдельные доклады на любую из конференций.
Естественно, что Автор, Участник, Абонент и Лидер Дискуссии — это объекты одного класса представляющего абстрактное лицо — TPerson. Ради простоты определим класс таких объектов как строку. Это же представление вполне соответствует и Названию:
TPerson=string;
Tcaption=string;
В свою очередь Дата может быть описана как:
TDate = record
year,mon,day : integer;
end;
Видимо Доклад, Конференция, Объявление — это то же классы. В программе может участвовать несколько объектов каждого из этих типов. А вот Аннотация Конференции — одно из полей класса Конференция. Послать и Получить — очевидно, методы классов Доклад, Конференция и Объявление. Для простоты, мы не будем учитывать особенностей сети, а предположим, что Посылка — это запись в некоторый общедоступный файл, тогда как Получение — загрузка из этого файла. Соответственно изменим названия методов на Загрузить и Сохранить. Вот предварительное распределение перечисленных понятий как классов, их методов и полей.

Диспетчерский Центр вероятно будет один, но объект этого типа не соответствует ни какому из классов, поэтому следует определить новый тип:

|