Автор: Пользователь скрыл имя, 18 Января 2012 в 17:18, реферат
Объектно-ориентированное программирование представляет собой метод программирования, который весьма близко напоминает наше поведение. Оно является естественной эволюцией более ранних нововведений в разработке языков программирования. Объектно-ориентированное программирование является более структурным, чем все предыдущие разработки, касающиеся структурного программирования. Оно также является более модульным и более абстрактным, чем предыдущие попытки абстрагирования данных и переноса деталей программирования на внутренний уровень.
1. Введение
2. Объекты
3. Свойства
4. Объекты: наследующие записи
5. Объекты и модули
6. Методы
7. Определения методов
8. Программирование в "действительном залоге"
9. Источники информации
Как показали данные определения, объекты тесно связаны с записями. Новое зарезервированное слово 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;
Это
тоже неплохо, но здесь ограничены одной
специфическим экземпляром
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 "Вычислить размер вашей ежедневной платы". Центральной концепцией здесь является объект. Этот объект обслуживают как список методов, так и список полей данных, содержащихся в объекте. И ни код, ни данные не являются здесь "директором".
Информация о работе Объектно-ориентированное программирование