Delphi: základy OOP poprvé
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama

Delphi: základy OOP poprvéDelphi: základy OOP poprvé

 

Delphi: základy OOP poprvé

Google       Google       23. 9. 2006       19 140×

Dnes si vysvětlíme a objasníme objektově orientované programování v Delphi.

Reklama
Reklama

Celý systém kompilovaných aplikaci je postaven na OOP, proto se i my podívejme, jak se s OOP pracuje v Delphi.

Každá třída musí být definována. Definice jsou buď celé námi vytvořené, nebo můžeme naprogramovat pouze část třídy (rozšířit již nějakou hotovou) a v této chvíli využíváme tzv. dědočnosti. Třídy jsou tedy základním stavebním kamenem. Jedna třída může být proměněna v několik prvků, tyto prvky pak nazýváme instancemi třídy nebo objekty - jedná se o totéž. Definice třídy vypadá následovně:


type
...
TMojeNovaTrida = class
  //definice vlastností
end;
...

Je zažitou a vhodnou konvencí používat před názvem každé třídy písmeno "T"! Získáte potom mnohem větší přehed o použitývh identifikátorech.

Vytvoření objektu probíhá potom následovně: vytvoření proměnné, která je typu úpožadovaného objektu; vytvoření objektu;


...
        novaPromenna: TMojeNovaTrida;

...

        novaPromenna := TMojeNovaTrida.Create();
...

Z objektu nyní můžeme volat všechny funkce a procedury námi definované. Velkou výhodou, a samozřejmostí, je dědičnost. Tu budeme v našich komponentech hojně využívat. Abychom nemuseli potřebný balast, a spoustu již hotových funkcí, psát sami, oddědíme potomka od námi vybraného předka (rodiče) a funkce zveřejníme případně poupravíme. Dědění probíhá následovně:


...
TMojeNovaTrida = class(TPredekNoveTridy)
  //definice vlastností
end;
...

V posledním příkladu jsme získaly děděním veškeré proměnné a metody (funkce a procedury). Hezké šetření práce, že?

A teď zkusíme něco prakticky. Vytvoříme třídu s jednou funkcí, kterou následně oddědíme a trochu pozměníme.

Zadání zní: třída "TNasob" vrací definovanou funkcí "nasobek" násobek hodnot předaných jako parametr. Třída "TNasobPricti" vrací ve funkci "nasobek" výsledek funkce "nasobek" s přičteným číslem 2.

Znalejší mávají rukou a my, začínající, si to předvedeme prakticky. Nejdříve definujeme naši novou třídu "TNasob"


TNasob = class
public //důležité: funkce a proměnné za tímto slovem budou veřejné
  function nasobek(a,b: integer):integer;
end;

// nyní klasická deklarace funkce v třídě

TNasob.nasobek(a,b: integer):integer;
begin
  result:= a * b;   //funkce vrací násobek předaných hodnot;
end;

Doufám, že zatím nikdo nemá problémy s pochopením posledního příkladu.

Za zmínku stojí pouze modifikátor public. Zde je seznam používaných modifikátorů a jejich popis.

Modifikátory
private - funkce a proměnné jsou soukromé, nejsou přístupny od jinud, než ze vnitř komponenty.
protected - funkce a proměnné jsou chráněné, přístup je povolen pouze třídě samotné, či jejím potomkům.
public - funkce a proměnné jsou přístupné v celé aplikaci, pokud je zde sama třída přístupná.
published - funkce a proměnné jsou přístupné nejen v aplikaci, ale také jejím návrhu. Tento modifikátor je využíván především pro tvorbu properity (vlastností), které měníte v Object Inspectoru.

Této problematice se budeme věnovat později. Pro teď je důležité, že funkce je definována veřejně a je tedy možné ji volat z programu.


Nyní vytvoříme potomka třídy TNasobek:


TNasobPricti = class(TNasob)
public //důležité: funkce a proměnné za tímto slovem budou veřejné
  function nasobek(a,b: integer):integer;
end;

// nyní klasická deklarace funkce v třídě

TNasobPricti.nasobek(a,b: integer):integer;
begin
  result:= inherited nasobek(a,b);
  result:= result + 2;   //funkce vrací násobek předaných hodnot s přičteným číslem dva;
end;

V tomto příkladě jsme využili možnosti dědění. Pomocí slůvka inherited jsme zdědili výsledek funkce rodiče ("nasobek"). Této funkci rodiče jsme taky předali parametry, které naše nová funkce obdržela.
result:= inherited nasobek(a,b); Poslední řádek znamená: Zděď výsledek funkce "nasobek" od mého rodiče a ulož ho do proměnné result;

Pro dnešek je toho myslím až dost. Na závěr přikládám celý zdrojový kód i s ukázkou využití.


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TNasob = class
  public
    function nasobek(a,b: integer):integer;
  end;

  TNasobPricti = class(Tnasob)
  public
    function nasobek(a,b :integer):integer;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TNasob.nasobek(a,b: integer):integer;
begin
 result := (a*b);
end;

function TNasobPricti.nasobek(a,b: integer):integer;
begin
 result := inherited nasobek(a,b);
 result := result + 2;
end;


procedure TForm1.Button1Click(Sender: TObject);
var trida: TNasobPricti;
begin
trida := TNasobPricti.Create;

edit3.Text := inttostr(
  trida.nasobek( strtoint( edit1.text ),
                 strtoint( edit2.Text ))
                      );
end;

end.

Zksete si: Vytvořte projekt v delphi a v něm třídu TPricti, která bude potomkem třídy TNasob (třída TNasob bude vypadat stejně jako v dnešním příkladu). Třída TPricti přičte ve své funkci "pricti" k odděděnému výsledku funkce "nasobek" (s dvěma předanými paramtry) číslo, které získá jako svůj třetí parametr. Dále vytvořte potomka třídy TPricti, jehož jméno bude TRovnice. Třída TRovnice ve své funkci "execute" zdědí od svého rodiče výsledek funkce nasobek a vydělí ho dvěma a zaokrouhlí jej. Celý program pracuje pouze s datovým typem integer. V projektu využijte třídu TRovnice, umožněte libovolný vstup.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Tagy:
Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jan ŠkrášekHonza pracuje jako webdeveloper, věnuje se vývoji Nette\Database a Nextras komponentám. Mnoho času věnuje komunitnímu portálu signály.cz. Honza je taky fanouškem XML technologií.
Web     Twitter    

Nové články

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý