Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.01.2010, 23:55
Nostalgia Nostalgia вне форума
Прохожий
 
Регистрация: 29.12.2008
Сообщения: 15
Репутация: 10
По умолчанию Способы реализации полиморфизма в 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  
Старый 05.01.2010, 00:41
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А здесь его и нету

С www.codenet.ru:
Полиморфизм (polymorphism) (от греческого polymorphos) - это свойство, которое позволяет одно и то же имя использовать для решения двух или более схожих, но технически разных задач. Целью полиморфизма, применительно к объектно-ориентированному программированию, является использование одного имени для задания общих для класса действий. Выполнение каждого конкретного действия будет определяться типом данных.
В более общем смысле, концепцией полиморфизма является идея "один интерфейс, множество методов". Это означает, что можно создать общий интерфейс для группы близких по смыслу действий.

Т.е. полиморфизм - фактически, это следствие наследования.
Но не само наследование как таковое.

Фактически, полиморфизм в Delphi можно реализовать либо через наследование, либо через интерфейсы (суть тоже наследование, но немного подругому). А перекрытие методов (override) - это просто механизм изменения описания метода в наследниках. Перегрузка (overload) - это вообще другая песня.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:33.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter