Объектно-ориентированное программирование

Автор: Пользователь скрыл имя, 18 Января 2012 в 17:18, реферат

Краткое описание

Объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает наше поведение. Оно является естественной эволюцией более ранних нововведений в разработке языков программирования. Объектно-ориентированное программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.

Оглавление

1. Введение
2. Объекты
3. Свойства
4. Объекты: наследующие записи
5. Объекты и модули
6. Методы
7. Определения методов
8. Программирование в "действительном залоге"
9. Источники информации

Файлы: 1 файл

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДИРАЦИИ.docx

— 79.49 Кб (Скачать)

     Как показали данные определения, объекты  тесно связаны с записями. Новое  зарезервированное слово object является наиболее очевидным различием, но как вы увидите позднее, имеется большое число других различий, некоторые из которых довольно тонкие.

     Например, поля Name, Title и Rate в типе TEmployee не указаны явно в типе THourly, но в любом случае тип THourly содержит их благодаря свойству наследования. Можно говорить о величине Name типа THourly в точности так же, как о величине Name типа TEmployee. 

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

     Экземпляры  объектных типов описываются  в точности так же, как в Паскале  описывается любая переменная, либо статическая, либо указатель, ссылающийся  на размещенную в динамической памяти переменную: 
 

                  type

                    PHourly = ^THourly;

                  var

                    StatHourly: THourly; { готово }

                    DynaHourly: PHourly; { перед использованием память должна

                                           выделяться с помощью New } 
 

     Поля  объектов

     Можно обратиться к полю объекта в точности так же, как к полю обычной записи, либо с помощью оператора with, либо путем уточнения имени с помощью точки. Например:

                       AnHourly.Rate := 9.45; 

                       with AnHourly do

                  begin

                    Name := "Sanderson, Arthur";

                    Title := "Word processor";

                  end; 

     Наследуемые поля объектов не интерпретируются особым образом только потому, что они являются наследуемыми.

     Наследуемые поля являются столь же доступными, как если бы они были объявлены внутри типа объекта. Например, даже если Name, Title и Rate не являются частью описания типа THourly (они наследованы от типа TEmployee), то можно ссылаться на них, словно они описаны в THourly. 
 

Объекты и модули 

     Имеет смысл определять объекты в модуле посредством описаний типа объекта  в интерфейсной части модуля, а  тела процедур и методы объекта - в  секции реализации. Для определения  объекта в модуле не требуется  никаких специальных соглашений.

     Примечание: Экспортируемый - означает "определенный в интерфейсной части модуля".

     Модули  могут иметь свои собственные  приватные (частные) определения типов  объектов внутри выполняемой секции, и эти типы подвержены тем же ограничениям, как и всякие другие типы, определенные в секции реализации. Типы объектов, определенные в интерфейсной части  модуля, могут иметь дочерние типы объектов, определенные в секции реализации модуля. В том случае, когда модуль B использует модуль A, модуль B также  может определять дочерние типы любого типа объекта, экспортируемого модулем A.

     Описанные ранее типы объектов и методы можно  определить в модуле, как показано в программе WORKERS.PAS на дистрибутивном диске. Чтобы использовать типы объектов и методы, определенные в модуле Workers, вы можете просто использовать этот модуль в своей программе и описать экземпляр типа THourly в секции переменных программы: 
 

                  program HourPrt; 
 

                  uses WinCrt, Workers; 
 

                  var

                  AnHourly: THourly;

                    .

                    .

                    .

     Для создания и вывода фамилии pабочего-почасовика, его должности и pазмеpа выплаты, пpедставленной пеpеменной AnHourly, вы просто вызываете методы AnHourly, используя следующий синтаксис: 
 

                    AnHourlye.Init("Sara Adams", "Account manager", 1400);

                                          { записывает в экземпляp THourly }

                                          { данные для Саpы Адамс: фамилию, }

                                          { должность и pазмеp выплаты. }

                    AnHourly.Show; 
 

     Примечание: Объектами могут быть также типизированные константы.

     Объекты, будучи очень схожими с записями, могут использоваться внутри оператора  with. В этом случае указание имени объекта, являющегося собственником методов, не является необходимым: 
 

                  with AnHourly do

                  begin

                    Init("Sara Adams", "Account manager", 1400);

                    Show;

                  end; 
 

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

     Секция  private

     В некоторых случаях может иметься части описаний объектов, которые экспортировать нежелательно. Например, можно предусмотреть объекты для других программистов, которые они могут использовать, но не могут непосредственно манипулировать с данными объекта. Чтобы облегчить это, Borland Pascal позволяет задавать внутри объектов приватные (закрытые) поля и методы.

     Приватные поля и методы доступны только внутри того модуля, в котором описан объект. В предыдущем примере, если бы тип  THourly содержал приватные поля, то доступ к ним можно было бы получить только в модуле THourly. Даже если другие части объекта THourly можно было бы экспортировать, (части, описанные, как приватные, были бы недоступными.

     Приватные поля и методы описываются непосредственно  после обычных полей и методов, вслед за зарезервированным словом private. Таким образом, полный синтаксис описания объекта будет следующим: 
 

                  type

                    NewObject = object(родитель)

                    поля;                        { общедоступные }

                    методы;                      { общедоступные }

                  private

                    поля;                        { приватные }

                    методы;                      { приватные }

                  end; 
 
 
 

Методы 

     Методы  являются одними из наиболее примечательных атрибутов объектно-ориентированное программирования. Рассмотрим задачу инициализации записи со следующим определением: 

                  TEmployee = object

                    Name: string[25];

                    Title: string[25];

                    Rate: Real;

                  end; 

     Большинство программистов использовали бы оператор with для присвоения полям Name, Title и Rate начальных значений: 

                  var

                    MyEmployee: Employee;

                  with MyEmployee do

                  begin

                      Name := "Sanderson, Arthur";

                      Title :=  "Word processor";

                      Rate := 9.45;

                  end; 

     Это тоже неплохо, но здесь ограничены одной  специфическим экземпляром записи - MyEmployee. Если потребуется инициализировать более одной записи типа Employee, то придется использовать большее число операторов with, которые выполняют в точности те же действия. Следующим естественным шагом является создание инициализирующей процедуры, которая обобщает оператор with применительно к любому экземпляру типа TEmployee, пересылаемой в качестве параметра: 

                  procedure InitTEmployee(var Worker: TEmployee; AName,

                                                  ATitle: String; ARate: Real);

                  begin

                    with Worker do

                    begin

                      Name := NewName ;

                      Title := NewTitle;

                      Rate := NewRate;

                    end;

                  end; 
 

     Метод - это процедура или функция, объединенная с данным типом столь тесно, что  метод является как бы окруженным невидимым оператором with, что делает экземпляр данного типа доступными изнутри для метода. Определение типа включает заголовок метода. Полное определение метода квалифицируется в имени типа. Тип объекта и метод объекта являются двумя лицами этой новой разновидности структуры, именуемой методом. 

                  type

                  TEmployee = object

                    Name, Title: string[25];

                    Rate: Real;

                    procedure Init (NewName, NewTitle: string[25];

                                                               NewRate: Real);

                  end; 
 

                  procedure TEmployee.Init (NewName, NewTitle: string[25];

                                                               NewRate: Real);

                  begin

                      Name := NewName ;   { Поле Name объекта TEmployee }

                      Title := NewTitle;  { Поле Tutle объекта TEmployee }

                      Rate := NewRate;    { Поле Rate объекта TEmployee }

                  end; 
 

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

                  var

                    AnEmployee: TEmployee;

                    AnEmployee.Init("Sara Adams, Account manager, 15000");

                               {пpосто, не так ли?} 
 
 

     Программирование  в "действительном залоге" 

     Большая часть из того, что говорилось об объектах до сих пор, исходит из удобств  и перспектив Borland Pascal. Объектно-ориентированное программирование имеет свое собственное отдельное множество понятий, частично благодаря началам объектно-ориентированного программирования в научных кругах, однако также и потому, что эта концепция действительно является радикально отличной от других.

     Примечание: Объектно-ориентированные языки  однажды метафорично назвали "языками  актеров".

     Было  бы полезно представить функцию  AnHourly.GetPayAmount как, например, дающую распоряжение объекту AnHourly "Вычислить размер вашей ежедневной платы". Центральной концепцией здесь является объект. Этот объект обслуживают как список методов, так и список полей данных, содержащихся в объекте. И ни код, ни данные не являются здесь "директором".

Информация о работе Объектно-ориентированное программирование