Файл: 3. Создание и использование объектов. Объектные переменные.pdf

Добавлен: 20.10.2018

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

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

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

 

 

3. Создание и использование объектов. Объектные переменные 

Для использования стандартных или собственных классов прежде всего 

необходимо  объявить  одну  или  несколько  объектных  переменных.  Для 

каждой  переменной  вводится 

уникальное  имя  и  указывается 

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

объектные переменные переменными классового типа

В языках Java, C#, Delphi/Free Pascal  объектные переменные являются 

неявными,  скрытыми  указателями  на  размещаемые  в  памяти  объекты. 

Как  известно,  значениями  указательных  переменных  являются  адреса 

областей 

памяти. 

Техника 

работы 

с 

адресными 

переменными 

использовалась  и  в  обычных  языках  (Си,  Паскаль),  а  для  объектных 

программ она является основной. В отличие от языка С++, где с адресными 

переменными  можно  делать  практически  все  что  угодно,  в  более  поздних 

языках  реализован  только  тот  набор  операций,  который  делает 

использование адресов более безопасным. 

На наш взгляд, имеет смысл различать понятия «объект» и «объектная 

переменная». Под объектом будем понимать область памяти, динамически 

выделенную  для  хранения  значений  свойств  объекта  и  некоторой 

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

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

ней информации. 

 

 

 

 

 

 

Адресный  характер  объектных  переменных  позволяет  реализовать 

много  интересных  возможностей,  прежде  всего  связанных  с  принципом 

полиморфизма,  но  в  то  же  время  увеличивает  вероятность  возникновения 

объектная переменная    

адрес объекта

 

 

объект 

  

значение свойства 1 
значение свойства 2 

. . . . . . . . . . 

значение свойства N

 

 


background image

 

 

ошибок времени выполнения и поэтому требует очень тщательной отладки 

программы. 

Необходимо  понимать,  что  объявление  объектной  переменной  НЕ 

означает  установку  ее  значения  в  некоторый  адрес.  Компилятор  выделяет 

память только для самой объектной переменной, но НЕ для адресуемого с ее 

помощью объекта. Установка адресного значения объектной переменной 

происходит  только  при  создании  объекта!  А  для  этого  требуется  вызов 

конструктора  класса.  Только  после  этого  объектная  переменная  может 

использоваться  для  вызова  методов  адресуемого  ею  объекта.  Этот  вызов 

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

метода. 

Интересной  (и  перспективной,  как  будет  ясно  из  дальнейшего) 

возможностью  является  объединение  отдельных  объектных  переменных  в 

единую  структуру  –  массив  или  динамический  список.  Например,  массив 

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

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

помощью циклов. 

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

переменных.  

3.1. Язык  Delphi/Free Pascal 

Шаг  1.  Объявление  объектной  переменной  (ОП):  указывается  имя  одной 

или нескольких переменных и через двоеточие – имя класса 

var   ИмяОП : ИмяКласса; 

Пример  объявления  переменных  для управления объектами-окружностями 

(класс  TCircle): 

var  MyCirc1,  MyCirc2 :  TCircle; 

Шаг 2. Создание объекта с помощью конструктора:  

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

указывается  объявленная  ранее  объектная  переменная,  а  в  правой  –  имя 

класса и через точку – имя конструктора 


background image

 

 

        ИмяОП  :=  ИмяКласса.Конструктор(параметры); 

Пример:  создание  двух  объектов-окружностей  –  одна  с  параметрами  по 

умолчанию, другая – с заданными в конструкторе параметрами: 

MyCirc1 :=  TCircle.Create; 

MyCirc2 :=  TCircle.Create (200, 100, 50); 

Шаг 3. Вызов методов объекта: 

          ИмяОП.ИмяМетода(параметры);   

Пример для объектов-окружностей 

           MyCirc1.Show;  //  отображение окружности 

           MyCirc1.MoveTo(100, 100);  //  перемещение окружности 

           Length := 6.28*MyCirc.GetR;   //  подсчет длины окружности 

 

Пример  объявления  и  использования  массива  объектных  переменных-

указателей на окружности: 

var   ArrOfCircs : array [1.. 100]  of  TCircle; 

for  i := 1  to  100  do  ArrOfCircs[ i ] :=  TCircle.Create (параметры); 

for  i := 1  to  100  do  ArrOfCircs[ i ].Show;  // отображение всех окр-тей 

 

Пример для объектов класса Студент: 

Шаг 1: 

var   Stud : TStudent;         //  объявление объектной переменной 

Шаг 2: 

Stud := TStudent.Create('Козин');           // создание объекта-студента 

Шаг 3:(консольный вариант) 

Stud.AddOcenky(5);

   

 

 

// добавление оценок 

Stud.AddOcenky(3); 

Stud.AddOcenky(2); 

Stud.SetOcenky(3, 4);

  

 

// изменение третьей оценки 


background image

 

 

Writeln (Stud.GetKol);

 

 

 

// вывод числа оценок 

Writeln (Stud.SredBall);

 

 

 

// вывод среднего балла 

Writeln (Stud.GetOcenky(2));

 

 

// вывод второй оценки 

Stud.SetFam ('Иванов');

 

 

 

// изменение фамилии 

 

Пример для МАССИВА объектов класса Студент: 

var   Gruppa : array [1..20]  of  TStudent;  // объявление массива ссылок  

Gruppa[1] := TStudent.Create('Иванов');   // создание объектов-студентов 

Gruppa[2] := TStudent.Create('Петров');  

. . . . . . . . . . 

Gruppa[ i ].AddOcenky(5);

 

   // добавление оценок студенту  i 

. . . . . . . . . . 

for   i := 1  to  20   do   

 

Writeln (Gruppa[ i ].SredBall);    // вывод среднего балла всех студентов                                                                       

Writeln (Gruppa[ i ].GetKol);

 

 

// вывод числа оценок студента  i 

Writeln (Gruppa[ i ].GetOcenky( j ));

 

// вывод оценки j студента i 

 

3.2. Языки   Java  и  C# 

Шаг 1. Объявление: указывается имя класса и через пробел(ы) – имя одной 

или нескольких переменных 

ИмяКласса     ИмяОП; 

Пример для класса окружностей: 

Circle   MyCirc1,  MyCirc2; 

Шаг  2.  Создание  с  помощью  конструктора:  реализуется  в  виде  оператора 

присваивания,  слева  –  имя  объектной  переменной,  справа  –  специальное 

ключевое  слово    new    и  затем  –  имя  конструктора  (возможно  -  с 

параметрами), совпадающее с именем класса 


background image

 

 

ИмяОП  =  new  Конструктор( ); 

Пример для класса окружностей: 

       MyCirc1  =  new  Circle( );  // вызов конструктора без параметров   

       MyCirc2  =  new  Circle(200, 100, 50);  // конструктор с параметрами 

Оба  языка  позволяют  шаги  1  и  2  объединить  вместе,  т.е.  в  одной 

конструкции  выполнить  объявление  объектной  переменной  и  ее 

инициализацию (создание объекта): 

        ИмяКласса   ИмяОП  =  new  Конструктор( );  

Circle   MyCirc  =  new  Circle(100, 100, 100); 

Шаг 3. Вызов методов  

        ИмяОП.ИмяМетода(параметры);   

Пример для объектов-окружностей 

           MyCirc1.Show( );  //  отображение окружности 

           MyCirc1.MoveTo(100, 100);  //  перемещение окружности 

           Length  =  6.28*MyCirc.GetR( );   //  подсчет длины окружности 

 

Пример  объявления  и  использования  массива  объектных  переменных-

указателей  на  окружности  (важно:  в  этих  языках  массивы  сами  являются 

объектами  и  поэтому  должны  создаваться  динамически  с  помощью 

операции  new): 

Circle[ ]   Circs;  // объявление массива  

Circs = new  Circle[100];  //  создание массива на 100 указателей 

Circs[ i ] = MyCirc1;  //  занесение в массив существующего объекта 

Circs[ i ] = new  Circle (100, 100, 50);  //  создание и занесение нового 

 

Пример для объектов класса Студент

Student   Stud;         //  объявление объектной переменной 

Stud = new  Student('Козин');           // создание объекта-студента 

Stud.AddOcenky(5);

   

 

 

// добавление оценок