Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Глава 5 Основы объектно-ориентированного программирования

____________________________________________________________________

uses

Classes, SysUtils; type

{ THuman } THuman = class

private

Fname: string;

Ffam: string;

procedure Setfam(const AValue: string); procedure Setname(const AValue: string);

public

property name: string read Fname write Setname; property fam: string read Ffam write Setfam; function GetData: string;

end;

implementation { THuman }

procedure THuman.Setname(const AValue: string); begin

if Fname = AValue then exit; Fname:= AValue;

end;

procedure THuman.Setfam(const AValue: string); begin

if Ffam = AValue then exit; Ffam:= AValue;

end;

function THuman.GetData: string;

421

5.3 Инкапсуляция

____________________________________________________________________

begin

Result:= name + ' ' + fam; end;

end.

program project1; {$mode objfpc}{$H+} uses

CRT, FileUtil, Unit1; var

Person: THuman; fname: string;

begin

Person:= THuman.Create;

Person.name:= 'Виталий';

Person.fam:= 'Петров'; fname:= Person.GetData;

writeln(UTF8ToConsole('Это: ' + fname)); writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;

Person.Free;

end.

В этой программе мы определили два свойства name и fam. Воспользо-

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

ля. В программе в явном виде мы эти методы не вызывали. Мы записали про-

сто

Person.name:= 'Виталий';

422

Глава 5 Основы объектно-ориентированного программирования

____________________________________________________________________

Person.fam:= 'Петров';

Всю остальную работу (вызов методов записи) за нас выполнил компиля-

тор. Обратите внимание, по сравнению с предыдущей программой name и fam

это не имена полей, а имена свойств. В следующем примере данные считыва-

ются с клавиатуры. Добавлен контроль ввода данных.

unit Unit1;

{$mode objfpc}{$H+} interface

uses

Classes, SysUtils; type

{ THuman }

THuman = class private

Fname: string;

Ffam: string;

Fbirthday: integer;

procedure Setname(const AValue: string); procedure Setfam(const AValue: string); procedure Setbirthday(const AValue: integer);

public

property name: string read Fname write Setname; property fam: string read Ffam write Setfam; property birthday: integer read Fbirthday write

Setbirthday;

function GetData: string;

423

5.3 Инкапсуляция

____________________________________________________________________

end;

implementation

{ THuman }

procedure THuman.Setname(const AValue: string); begin

if Fname = AValue then exit; Fname:= AValue;

end;

procedure THuman.Setfam(const AValue: string); begin

if Ffam = AValue then exit; Ffam:= AValue;

end;

procedure THuman.Setbirthday(const AValue: integer); begin

if Fbirthday = AValue then exit; Fbirthday:= AValue;

end;

function THuman.GetData: string; var

s: string; begin

str(birthday, s);

Result:= name + ' ' + fam + ' ' + s;

424

Глава 5 Основы объектно-ориентированного программирования

____________________________________________________________________

end;

end.

program project1;

{$mode objfpc}{$H+}

uses

CRT, FileUtil, Unit1; var

Person: THuman;

fname, sname, s_year: string; code, year: integer;

begin

Person:= THuman.Create; writeln(UTF8ToConsole('Введите имя')); readln(fname);

Person.name:= fname; writeln(UTF8ToConsole('Введите фамилию')); readln(sname);

Person.fam:= sname;

writeln(UTF8ToConsole('Введите год рождения'));

readln(s_year);

val(s_year,

year,

code);

//

контроль ввода

425

Смотрите также:

1 — пак
11 Горм +
113
14
1433
1511
1632
199
204
2714