|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Способы реализации полиморфизма в Delphi
подскажите пожалуйста какой есть еще принцип реализации полиморфизма в Delphi. Есть 1) перекрытие(override)
2) перегрузка (overload) Какие ещё есть способы ? Вот код, где здесь реализация полиморфизма ? Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Unit2, Unit3; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; C:TChelovek; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin C.SetAll(Form1.Edit1.Text,Strtoint(Form1.Edit2.Text), Form1.Edit3.Text, StrToInT(Form1.Edit4.Text)) ; C.Age; Form1.Memo1.Lines.Add(C.Describe); end; procedure TForm1.FormCreate(Sender: TObject); begin C:=TChelovek.Create; C.SetAll('Èâàíîâà', 1991, 'Åëåíà', 14); C.Age; Form1.Memo1.Lines.Add(C.Describe); end; procedure TForm1.FormDestroy(Sender: TObject); begin C.Free; end; end. unit Unit2; interface uses SysUtils, Dialogs, DateUtils; type THuman=class private FAge:integer; Ffam:string; FGod_rozd:integer; function GetFfam:string; procedure SetFfam(Ff:string); function GetFGod_rozd:integer; procedure SetFGod_rozd(FGR:integer); public Function GetFAge:integer; procedure Age; function Describe:string; procedure SetAll(fam:string;god:integer); property Ffams:string read GetFfam write SetFfam; property FGod_rozds: integer read GetFGod_rozd write SetFGod_rozd; end; implementation function THuman.GetFfam:string; begin GetFfam:=Ffam; end; procedure THuman.SetFfam(Ff:string); begin Ffam:=Ff; end; function THuman.GetFGod_rozd:integer; begin GetFGod_rozd:=FGod_rozd; end; procedure THuman.SetFGod_rozd(FGR:integer); begin FGod_rozd:=FGR; end; procedure THuman.Age; begin FAge:=YearOf(Date)-FGod_rozd; end; function THuman.GetFAge:integer; begin GetFAge:=FAge; end; function THuman.Describe:string; begin Describe:='Ôàìèëèÿ - '+Ffam+' '+'Ãîä ðîæäåíèÿ - '+IntToStr(FGod_rozd)+' '+' Âîçðàñò - '+IntToStr(FAge)+' '; end; procedure THuman.SetAll( fam:string; god:integer); begin Ffam:=fam; FGod_rozd:=god; Age; end; end. unit Unit3; interface uses SysUtils, Dialogs, Unit2; type TChelovek=class(THuman) private FImya:string; Fnomer:integer; function GetFImya:string; procedure SetFImya(FI:string); function GetFnomer:integer; procedure SetFnomer(FN:integer); public property FImyas:string read GetFImya write SetFImya; property Fnomers:integer read GetFnomer write SetFnomer; function Describe:string; procedure SetAll(fam:string;god:integer; imya: string; nomer:integer); overload; end; implementation function TChelovek.GetFImya:string; begin GetFImya:=FImya; end; procedure Tchelovek.SetFImya(FI:string); begin FImya:=FI; end; function TChelovek.GetFnomer:integer; begin GetFnomer:=Fnomer; end; procedure TChelovek.SetFnomer(Fn:integer); begin Fnomer:=Fn; end; function TChelovek.Describe:string; begin result:=inherited Describe; Describe:=result+' èìÿ - '+FImya+' '+' íîìåð - '+IntToStr(Fnomer); end; procedure TChelovek.SetAll(fam:string;god:integer; Imya:string; nomer:integer); begin inherited SetAll(fam,god); FImya:=Imya; Fnomer:=nomer; end; end. |
#2
|
|||
|
|||
А здесь его и нету
С www.codenet.ru: Полиморфизм (polymorphism) (от греческого polymorphos) - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных. В более общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий. Т.е. полиморфизм - фактически, это следствие наследования. Но не само наследование как таковое. Фактически, полиморфизм в Delphi можно реализовать либо через наследование, либо через интерфейсы (суть тоже наследование, но немного подругому). А перекрытие методов (override) - это просто механизм изменения описания метода в наследниках. Перегрузка (overload) - это вообще другая песня. |