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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 03.12.2007, 06:03
f3nix f3nix вне форума
Прохожий
 
Регистрация: 03.12.2007
Сообщения: 1
Репутация: 10
По умолчанию Как построить свой собственный класс

Здравствуйте, уважаемые форумчане!

Помогите мне в нелегком деле.
Мне дали задания по Делфи создать свой собственный класс (любую прогу), но чтобы там применялась:
- наследование
- полиморфизм
- инкапсуляция.
Теорию я сам всю выучил до зубов, а на практике ничего не получается.
Прошу у Вас помощи!

С Уважением, Роман!
Ответить с цитированием
  #2  
Старый 05.12.2007, 15:58
Аватар для Rokuell
Rokuell Rokuell вне форума
Активный
 
Регистрация: 27.12.2006
Адрес: Псков
Сообщения: 274
Версия Delphi: Delphi 7
Репутация: 497
Восклицание Матчасть

Очень рекомендую учебник: "С. Бобровский. Delphi7. Учебный курс"

Примеры:
1) Инкапсуляция

Добавляешь в проект два новых модуля Unit2 и Unit3;

В Unit2 в раздел interface:
Код:
type
  TOne = class(TObject)
  private
   function F1(x,y:integer):integer;
  public
   function F2(x,y:integer):integer;
   function F3(x:integer):integer;
  end;
в раздел implementation:
Код:
function TOne.F1(x, y: integer): integer;
begin
 Result:= x + y;
end;

function TOne.F2(x, y: integer): integer;
begin
 Result:= x*y + Self.F1(x,y);  // x*y + x + y
end;

function TOne.F3(x: integer): integer;
begin
 Result:= x + 2;
end;
В Unit3 в раздел interface:
ссылку на второй модуль
Код:
uses Unit2;
и
Код:
type
  TTwo = class(TOne)
  public
   function F2(x,y:integer):integer;
  end;
в раздел implementation:
Код:
function TTwo.F2(x, y: integer): integer;
begin
 Result:=x*x*y+Self.F3(y); // x*x*y+y+2
  // 2) Наследование
  // функция F3 наследуется от родительского класса TOne  
end;

Т.к функция F1 класса TOne объявлена в разделе private,
то она видна только в даннов классе(ну и в модуле, где описан класс),
о вот функции F2 и F3 можно свободно использовать.

3) Полиморфизм

теперь в главный модуль:
добавить ссылки на Unit2 и Unit3;
и, например, по клику на кнопке:
Код:
var obj1:TOne;
     obj2:TTwo;
begin
 obj1 := TOne.Create;
 obj2 := TTwo.Create;

 ShowMessage('x=3, y=5, F2='+IntToStr(obj1.F2(3,5))); // 3*5+3+5=23
 ShowMessage('x=3, y=5, F2='+IntToStr(obj2.F2(3,5))); // 3*3*5+y+2=52
 // - вот пример полиморфизма - вызывается метод класса TTwo
 // а вот чтобы вызвать родительский метод F2 надо:
 ShowMessage('x=3, y=5, F2='+IntToStr(TOne(obj2).F2(3,5))); // 3*5+3+5=23

 obj2.Free;
 obj1.Free;
end;
Вложения
Тип файла: zip Пример.zip (3.9 Кбайт, 13 просмотров)
Ответить с цитированием
  #3  
Старый 05.12.2007, 16:23
Rosenkrantz Rosenkrantz вне форума
Активный
 
Регистрация: 04.12.2007
Адрес: Москва
Сообщения: 234
Версия Delphi: Delphi 7
Репутация: 40
По умолчанию

Создайте наследника от одного из стандартных классов и будет у вас сразу инкапсуляция и наследование. Для демонстрации полиморфизма нужно перекрыть один из виртуальных методов класса-предка.

Вот пример наследника TLabel, который по щелчку мыши открывает заданную страницу в браузере:
Код:
unit Unit2;

interface

uses
  Windows, Classes, StdCtrls, ShellAPI;

Type
  TLinkLabel = class(TLabel)
  private
    FLink: String;
  protected
  public
    constructor Create(AOwner: TComponent; ALink: String);
    procedure Click; override;

    property Link: String read FLink write FLink;
  end;

implementation

{ TLinkLabel }

procedure TLinkLabel.Click;
begin
  inherited;
  if FLink <> '' then
    ShellExecute(Parent.Handle, 'open', PChar(FLink), nil, nil, SW_SHOW);
end;

constructor TLinkLabel.Create(AOwner: TComponent; ALink: String);
begin
  inherited Create(AOwner);
  FLink := ALink;
end;

end.

Потом в главной форме пишем, например, так:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  L: TLabel;
begin
  // Создаем объект
  L         := TLinkLabel.Create(Self, 'http://www.delphisources.ru');
  L.Top     := 10;
  L.Left    := 10;
  L.Caption := 'DelphiSources';
  L.Parent  := Self;
end

Полиморфизм здесь в том, что переменная L объявлена как TLabel, тем не менее после присвоения ей значения типа TLinkLabel, она корректно вызывает переопределенный метод Click.

Пример, конечно, абсолютно высосанный из пальца и не жызненный.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter