OOP v Pascalu – Pascal – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

OOP v Pascalu – Pascal – Fórum – Programujte.comOOP v Pascalu – Pascal – Fórum – Programujte.com

 

5. 2. 2008   #1
-
0
-

Máte někdo alespoň základní zkušenosti s OOP v Pascalu (ne ObjectPascalu)? Probíráme jej ve škole, bohužel jsem chyběl na podstatné věci (vlastnost polymorfismus, k čemu slouží construktor, jak se zapisuje, jak je to s destruktorem, tabulka virtuálních metod, posílání zpráv objektům...) a nemůžu nikde na internetu najít ani zmínku, že se vůbec OOP v Pascalu dá, jedinou zmínku jsem našel v knize Pascal pro zelenáče, kde je OOP vysvětleno velmi povrchně a více méně pouze teoreticky. Nevíte, kde bych' mohl sehnat dané informace, či neudělali by jste (nejen) pro mě krátký přehled?

Nahlásit jako SPAM
IP: 83.240.78.–
Podpis: Do podpisu nelze vložit obrázky ani HTML kód. Je podporován nový řádek tagem
.
5. 2. 2008   #2
-
0
-

I když, jestli jsem se náhodou nezeptal na naprostou krávovinu... jak tak koukám, nejsem si jistý, jestli už neprobíráme ObjectPascal (sice nám o tom informatikářka neřekla, ale podle syntaxe kolotoc = object procedure roztoc(x:integer) end; bych' to na něho viděl...). Dá se Object Pascal kompilovat v TurboPascalu? Jestli ano, tak se už ptám na ObjectPascal :-).

Nahlásit jako SPAM
IP: 83.240.78.–
Podpis: Do podpisu nelze vložit obrázky ani HTML kód. Je podporován nový řádek tagem
.
Laaca0
Stálý člen
5. 2. 2008   #3
-
0
-

Neboj,pořád probíráte klasickýTurbo pascal :smile1:
Zkrátka, když se objekt definuje slovem object tak jde o klasický pascal. Když se definuje slovem class jde o Objectpascal, který můžeš přeložit pomocí Delphi, Kylix nebo Freepascalu.

kolotoc = object procedure roztoc(x:integer) end;
To je úplně nejzákladnější objektová konstrukce pascalu - to se pak dá dál rozvíjet.

Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
Laaca0
Stálý člen
5. 2. 2008   #4
-
0
-
Nahlásit jako SPAM
IP: 81.0.253.–
DOS-u-akbar
5. 2. 2008   #5
-
0
-

Jj, díky. Jenom nevím, jak se moje strukturované myšlení s novým stylem vyrovná. Upřímně řečeno, strukturovaně píšu v Pascalu aktivně dva roky (studium programátor :-)) a nevidím moc žádný důvod na OOP přecházet... sice o něm slyším ze všech stran, normální strukturovaný jazyk se snad už nechytne, ale já stále moc nechápu výhody...

Nahlásit jako SPAM
IP: 83.240.78.–
Podpis: Do podpisu nelze vložit obrázky ani HTML kód. Je podporován nový řádek tagem
.
5. 2. 2008   #6
-
0
-

Aha, tak děkuji Mircosoftu za jeho výstižný tutoriál, bohužel po nás chtějí ve škole i onu Tabulku Virtuálních Metod, o které já ani Mircosoft nevíme zhola nic :-). Ještě bych' se zmínil o klíčovém slově inherited...

Nahlásit jako SPAM
IP: 83.240.78.–
Podpis: Do podpisu nelze vložit obrázky ani HTML kód. Je podporován nový řádek tagem
.
Laaca0
Stálý člen
6. 2. 2008   #7
-
0
-

Oba pojmy - tabulka virtuálních metod (VMT) i inherited souvisejí s dědičností objektů. Mircosoft se o dědičnosti bohužel moc nerozepisuje. Jestl nebudu mít moc silnou kocovinu. tak se v neděli pokusím napsat něco jako pokračování jeho manuálu.
Inherited můžu ale vysvětlit už teď. Když máš tuhle definici:



type
objekt1=object
Procedure PredstavSe;
end;

objekt2 = object(objekt1)
Procedure PredstavSe;
end;

objekt3 = object(objekt2)
Procedure PredstavSe;
Procedure PredstavSeJinak;
end;

Procedure Objekt1.PredstavSe;
begin
Writeln('Objekt1');
end;

Procedure Objekt2.PredstavSe;
begin
inherited PredstavSe;
Writeln('Objekt2');
end;

Procedure Objekt3.PredstavSe;
begin
inherited PredstavSe;
Writeln('Objekt3');
end;

Procedure Objekt3.PredstavSeJinak;
begin
Objekt2.PredstavSe;
Writeln('Objekt3');
end;


Po vyzkoušení bude zjevné, co inherited dělá. Volá metodu svého nejbližšího předka. Tedy Objekt3.PredstavSe a Objekt3.PredstavSeJinak jsou analogické.

Nahlásit jako SPAM
IP: 195.113.79.–
DOS-u-akbar
Osiris0
Stálý člen
6. 2. 2008   #8
-
0
-

Garret Raziel napsal:
Aha, tak děkuji Mircosoftu za jeho výstižný tutoriál, bohužel po nás chtějí ve škole i onu Tabulku Virtuálních Metod, o které já ani Mircosoft nevíme zhola nic :-). Ještě bych' se zmínil o klíčovém slově inherited...



Pokud chceš opravdu umět OOP, tak pascal na OOP nedoporučuji. Je to jako sekat trávu nůžkama na nehty. Používej radši sekačku (C#, C++, Java.... možností je spousta).

VMT je virtual method table a slouží k ukládání virtuálních funkcí. Existují staticky linkované funkce a virtuální. Souvisí to s dědičností. Předpokládejme, že máme třídy T1 a T2 obě se stejně pojmenovanými procedurami, z nichž některé jsou virtuální a T2 je potomek T1. Normální (staticky linkované) funkce ve třídě se určí přímo za překladu, že třeba funkce xxx je na adrese 0FB45AAB, virtuální se určí až při běhu programu, která funkce se má zavolat (zjednodušeně řečeno) pomocí tabulky VMT. Funguje to tak, že jednotlivé konstruktory těch tříd dosazují do VMT adresy těch virtuálních funkcí.

Nahlásit jako SPAM
IP: 85.70.130.–
Mircosoft+1
Věrný člen
6. 2. 2008   #9
-
0
-

Ten svůj manuál už budu muset apdejtnout, o virtuálních metodách už konečně něco málo vím :smile1: .

Dost obsáhlý a podrobný přehled, jak funguje OOP v TP a v Delphi, se dá najít na Sejdově stránce: http://sejda.shoubounavlasku.cz/programming/index.php, konkrétně tenhle soubor: http://sejda.shoubounavlasku.cz/programming/objectpascal/objectpascal.rtf. Doporučuji přečíst, tam najdeš snad všechno.

Dále - klíčové slovo inherited v TP ještě není. Tam se zakryté metody předků dají volat pouze stylem "Objekt2.PredstavSe". Pak tam taky nehledej slova dynamic, override, reintroduce, class, event a podobně. Jediné, co tam je, je object, constructor, destructor a virtual (co chtít víc? :-) ).

A k čemu OOP? Můj názor je, že je to dobrá pomůcka pro zpřehlednění rozsáhlejších programů, ale že všeho moc škodí a snaha o čistě objektové programování (zvlášť v TP) znamená jenom spoustu samoúčelné práce navíc. Např. deklarování instancí objektu typu "okno se zprávou" (viz Delphi). V TP si prostě napíšu veřejnou proceduru a volám ji, kdy chci. Ale zase GUI (tlačítka, okýnka a tak) bez objektů si moc neumím představit (asi by to byla nepřehledná hromada recordů a spousta obslužných procedur, kterým by se muselo všechno strkat přes parametry).
To zpřehledňování myslím hlavně v tom smyslu, že každý objekt má vlastní jmenný prostor, takže můžu mít v jednom programu třeba deset procedur pojmenovaných "Zobraz" a hromadu stejně pojmenovaných proměnných a nepotlučou se mi. A ani to nemusí mít nic společného s dědičností.

V učebnicích OOP se tradičně tvrdí, že zapouzdřením do objektů svůj kód zabezpečíme proti neoprávněnému čtení a manipulaci s daty. Že zveřejníme jenom definice tříd a zbytek si necháme a nikdo se v tom nebude moct šťourat. Ovšem totéž se pohodlně zařídí zveřejněním interfacu jednotky bez implementační části. A pokaždé použitelnost takového kódu závisí na tom, jak ho zdokumentujeme, protože když nevidím zdroják, musí mi být veškerá funkce jasná z hlavičky a komentářů.

Nahlásit jako SPAM
IP: 147.32.160.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
6. 2. 2008   #10
-
0
-

To Osiris : Ano, však já se sám chci učit C++, ale OOP bereme ve škole a bereme ho v Pascalu, tak mi už jenom kvůli dobré známce nezbývá nic jiného, než ho brát v Pascalu.

Nahlásit jako SPAM
IP: 83.240.78.–
Podpis: Do podpisu nelze vložit obrázky ani HTML kód. Je podporován nový řádek tagem
.
Laaca
~ Anonymní uživatel
225 příspěvků
6. 2. 2008   #11
-
0
-

Klíčové slovo inherited v Turbo pascalu JE
(ve verzi 7.0x)

Nahlásit jako SPAM
IP: 81.0.253.–
Mircosoft+1
Věrný člen
17. 2. 2008   #12
-
0
-

Tak jsem ten text o objektech poněkud překopal a už se za něj nestydím :-)
http://www.mircosoft.ic.cz/texty/OOP.TXT
Teď je tam všechno včetně virtuálních metod (a slova inherited, dík za upozornění).

Nahlásit jako SPAM
IP: 85.132.158.–
Chceš-li lepší odpověď, polož lepší otázku.
Moje stránka.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 5 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý