Файл: 4. Разработка простейшего объекта-контейнера.pdf

Добавлен: 20.10.2018

Просмотров: 996

Скачиваний: 8

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

 

 

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)  {   // код перемещения  } 


background image

 

 

//  конец описания класса 

 

Фрагмент демонстрационной программы: 

 

class   ContDemo { 

   static  void  Main ( )  {   //   точка входа в программу 

      ArrayCircleContainer   MyCont = new  ArrayCircleContainer (100); 

      Circle  MyCirc = new  Circle (. . . . .); 

      MyCont.Add (MyCirc);    

      //  повторить два последних действия необходимое число раз 

      MyCont.ShowAll ( ); 

      MyCont.MoveAll (50, 50); 

      . . . . . . . . . . 

      } 

}   

 

Пример  реализации  контейнерного  объекта  интересен  еще  и  тем,  что 

объектная программа использует объекты двух типов — сами хранящиеся в 

контейнере объекты и собственно объект-контейнер. Тем самым в программе 

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

обсуждения  в последующих темах пособия. Но уже сейчас можно привести 

схематичное представление такого взаимодействия, и для этих целей удобно 

воспользоваться  средствами  языка  моделирования  UML,  в  частности  — 

диаграммой  классов.  Подробное  рассмотрение  этого  языка  выходит  за 

рамки  пособия,  поэтому  ограничимся  упрощенной  формой  диаграммы 

классов, причем в качестве примера возьмем классы «Студент» и «Группа». 

Каждый  класс  представим  в  виде  прямоугольника,  содержащего  три 

области  —  название  класса,  перечень  его  свойств,  перечень  методов.  Для 

обозначения связи этих классов используется стрелка от класса «Студент» к 

классу «Группа» с указанием возможного числа студентов в группе. 


background image

 

 

Этот  простой  пример  показывает  одну  из  самых  замечательных 

особенностей 

объектного 

подхода 

— 

четкое 

распределение 

функциональных  обязанностей  между  объектами.  Объекты  класса 

«Студент» отвечают за информацию, связанную только с одним конкретным 

студентом  (его  фамилия  и  оценки),  а  объекты  класса  «Группа»  реализуют 

другую  функциональность,  такую  как  добавление  и  удаление  студентов, 

обработку сводных данных в разрезе группы. 

Упрощенная диаграмма классов для задачи «Студенты — Группа» имеет 

следующий вид: 

Класс-контейнер «Группа» 

Номер группы 
Число студентов 
Массив ссылок на объекты-студенты
 
Конструктор(ы), Методы доступа 
Методы добавления, удаления, поиска студентов 
Метод расчета рейтинга по группе

 

 

5 .. 30 

Класс информационных объектов «Студент» 
Фамилия 
Число оценок 
Массив оценок 
Конструктор(ы), Методы доступа 
Методы добавления и изменения оценок 
Метод расчета среднего балла