ВУЗ: Университет управления «ТИСБИ»
Категория: Учебное пособие
Дисциплина: Объектно-ориентированное программирование
Добавлен: 20.10.2018
Просмотров: 1155
Скачиваний: 8
if ( Gruppa.Delete('Петров')) then «удален» else «нет такого»
6. Найти студента по фамилии:
Nomer := Gruppa.Search('Козин');
if ( Nomer = 0 ) then «не нашли» else «нашли под номером Nomer» ;
7. Изменить фамилию студента с заданным номером:
Stud := Gruppa.GetStud(Nomer); // сначала получаем ссылку на студента
if (Stud <> nil) then Stud.SetFam('Сидоров'); // а теперь используем ее
8. Вывести средний балл студента с заданным номером:
if (Stud <> nil) then Writeln(Stud.SredBall); // аналогично
Для сравнения приведем описание контейнерного класса на языке
C#, отметив заодно, что практически также выполняется описание на языке
Java. Напомним, что в этих языках массивы являются объектами и поэтому
всегда создаются динамически.
class ArrayCircleContainer {
private Circle[ ] Circs; // будущий массив указателей
private int Count; // счетчик числа объектов в контейнере
public ArrayCircleContainer (int aSize) {
Circs = new Circle[aSize]; // создание массива
Count = 0; }
public int GetCount { return Count;}
public int GetSize { return Circs.Length; }
public bool Add (Circle aCirc) { // код добавления новой окружности}
public Circle Delete (int ai) { // код удаления окружности по ее номеру}
public Circle Search (int aRad) { // код поиска по радиусу }
public void ShowAll( ) { // код отображения всех окружностей }
public void MoveAll (int dx, int dy) { // код перемещения }
}
// конец описания класса
Фрагмент демонстрационной программы:
class ContDemo {
static void Main ( ) { // точка входа в программу
ArrayCircleContainer MyCont = new ArrayCircleContainer (100);
Circle MyCirc = new Circle (. . . . .);
MyCont.Add (MyCirc);
// повторить два последних действия необходимое число раз
MyCont.ShowAll ( );
MyCont.MoveAll (50, 50);
. . . . . . . . . .
}
}
Пример реализации контейнерного объекта интересен еще и тем, что
объектная программа использует объекты двух типов — сами хранящиеся в
контейнере объекты и собственно объект-контейнер. Тем самым в программе
реализуется взаимодействие объектов, что является предметом детального
обсуждения в последующих темах пособия. Но уже сейчас можно привести
схематичное представление такого взаимодействия, и для этих целей удобно
воспользоваться средствами языка моделирования UML, в частности —
диаграммой классов. Подробное рассмотрение этого языка выходит за
рамки пособия, поэтому ограничимся упрощенной формой диаграммы
классов, причем в качестве примера возьмем классы «Студент» и «Группа».
Каждый класс представим в виде прямоугольника, содержащего три
области — название класса, перечень его свойств, перечень методов. Для
обозначения связи этих классов используется стрелка от класса «Студент» к
классу «Группа» с указанием возможного числа студентов в группе.
Этот простой пример показывает одну из самых замечательных
особенностей
объектного
подхода
—
четкое
распределение
функциональных обязанностей между объектами. Объекты класса
«Студент» отвечают за информацию, связанную только с одним конкретным
студентом (его фамилия и оценки), а объекты класса «Группа» реализуют
другую функциональность, такую как добавление и удаление студентов,
обработку сводных данных в разрезе группы.
Упрощенная диаграмма классов для задачи «Студенты — Группа» имеет
следующий вид:
Класс-контейнер «Группа»
Номер группы
Число студентов
Массив ссылок на объекты-студенты
Конструктор(ы), Методы доступа
Методы добавления, удаления, поиска студентов
Метод расчета рейтинга по группе
5 .. 30
Класс информационных объектов «Студент»
Фамилия
Число оценок
Массив оценок
Конструктор(ы), Методы доступа
Методы добавления и изменения оценок
Метод расчета среднего балла