PersonUnit (Переопределение Equals, ToString)
Материал из Вики ИТ мехмата ЮФУ
Версия от 20:31, 21 мая 2009; Juliet (обсуждение | вклад)
unit PersonUnit;
interface
uses System;
const
/// Минимальный возможный возраст
MIN_AGE = 1;
/// Максимальный возможный возраст
MAX_AGE = 120;
// --------------------------------------------- Person -------------------------------------------
type
/// Персона
Person = class
private
/// Имя
fName: string;
/// Возраст
fAge: integer;
/// Устанавливает имя равным name, если оно не пусто
procedure SetName(name: string);
/// Устанавливает возраст равным age, если он положителен
/// и не превышает максимально возможного (MAX_AGE)
procedure SetAge(age: integer);
public
/// <summary>
/// Создает новую персону
/// </summary>
/// <param name="Name">Имя (пустое недопустимо)</param>
/// <param name="Age">Возраст (отрицательный недопустим)</param>
constructor Create(Name: string; Age: integer);
/// Возвращает истину, если текущий объект равен по значению объекту o
function Equals(o: object): boolean; override;
/// Возвращает строковое представление персоны
function ToString: string; override;
/// Имя
property Name: string read fName write SetName;
/// Возраст
property Age: integer read fAge write SetAge;
/// Выводит на консоль информацию о персоне
procedure Print; virtual;
end;
implementation
// --------------------------------------------- Person -------------------------------------------
procedure Person.SetName(name: string);
begin
if name <> '' then
fName := name
else
raise new Exception(
'Попытка задать персоне пустое имя.');
end;
procedure Person.SetAge(age: integer);
begin
if age > 0 then
fAge := age
else
raise new Exception(
'Выход за границы диапазона допустимого возраста [' +
MIN_AGE.ToString + '..' + MAX_AGE.ToString + '].');
end;
constructor Person.Create(Name: string; Age: integer);
begin
SetName(Name);
SetAge(Age);
end;
{Возвращает истину, если текущий объект равен по значению объекту o}
function Person.Equals(o: object): boolean;
begin
if o = nil then
Result := false
else if GetType <> o.GetType then
Result := false
else
begin
var p := Person(o);
Result := (Name = p.Name) and (Age = p.Age);
end;
end;
function Person.ToString: string;
begin
Result := Format(
'Имя: {0} Возраст: {1} ',
fName, fAge);
end;
procedure Person.Print;
begin
WriteFormat(
'Имя: {0} Возраст: {1} ',
fName, fAge);
end;
end.