Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 9 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Triedy a práca s nimi

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok NapísalOffline : 09.08.2010 16:33

Ahoj, veľa o triedach (TClass) neviem, možno je moja predstava o triedach nesprávna, ale pracujem na jednom projekte, ktorý vkuse pracuje s MySQL, v ktorej sú uložené informácie o používateľoch, zmluvách, faktúrach, produktoch, platbách atď.

Ide o to, že tam mám väčšie množstvo funkcií... sú funkcie pre:
Používateľov:
- vytvorenie používateľa
- vymazanie používateľa
- editáciu

Faktúry:
- vytvorenie faktúry
- tlač faktúry

atď.

Od tried očakávam, že mi v tomto spravia poriadok a funkcie (resp. metódy) mi zoskupia pod svoje krídlo, takže k nim budem môcť pristupovať napr. cez:
Kód:
User.Add('Jozef', 'Mocný'); // vytvori usera
Invoice.Create(17); // vytvori fakturu pre usera s idckom 17

Dá sa to? Je to vôbec možné?


Offline

Skúsený užívateľ
Skúsený užívateľ
Triedy a práca s nimi

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 09.08.2010 17:12

Nielenže sa to dá, ale na to sú triedy určené. To je vlastne cieľ objektovo orientovaných jazykov - neprogramovať procedurálne, ale pomocou tried, teda objektovo.
Vytvoríš si triedu, ktorá bude mať konšruktor (deštruktor) a členské funkcie. Členské funkcie sú prístupné iba pre objekty danej triedy.
Ďalej môžeš využívať dedenie, tzn, že máš rodičovskú triedu, ktorá má spoločné časti pre používateľov aj pre faktúry a z nej potom vytvoríš ďalšie triedy s pridanými vlastnosťami od rodičosvskej.

Prečítaj si základy o OOP v delphi, aby si sa trocha do toho dostal a potom ak budeš mať nejaký konkrétny problém vo svojom programe, tak sa spýtaj. Pozri sa napríklad sem, ako vytvoriť triedu.


Offline

Užívateľ
Užívateľ
Triedy a práca s nimi

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok Napísal autor témyOffline : 20.08.2010 13:57

No buď to nefunguje ako chcem (málo pravdepodobné) alebo som blbý (takmer isté). V každom prípade, čo čítam je nutné vytovoriť objekt (instanciu) danej triedy. Mne ide však o to, aby som nič vytvárať nemusel a jednoducho len napísal:
Faktura.Vytvor('baf');
a funckia Vytvor triedy Faktura to urobí. Čiže ja od toho očakávam niečo na štýl zgrupených funkcií, lebo teoreticky by to šlo spraviť cez funkcie:

Faktura_Vytvor(bla bla);
Faktura_Edituj(nieco);

Ale ak to chápem správne, tak classy (triedy) umožňujú navyše vytvorenie prepojenia medzi metódami triedy. Čiže napr. si budú môcť zdieľať hodnoty premenných atď. Len furt neviem či to chápem dobre :/


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 20.08.2010 14:31

asi myslis class metody tried , ale najprv si to poriadne nastuduj


Offline

Skúsený užívateľ
Skúsený užívateľ
Triedy a práca s nimi

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 20.08.2010 14:41

V prvom rade si musíš uvedomiť, ako funguje trieda a ako s nimi pracovať. Pokúsim sa ti to vysvetliť na nejakom príklade:
Predstav si triedu auto. Táto trieda má určité prvky, vlastnosti, podľa ktorých ju dokážeme rozlíšiť, identifikovať ju, pracovať s ňou. Každé auto má napríklad štyri kolesá, volant, karosériu atď. To všetko daná trieda obsahuje. Z tejto triedy (auto) môžme vytvoriť inštancie, napríklad zelené auto, modré auto, atď. Všetky inštancie triedy auto majú všetky vlastnosti tejto triedy, ale pritom jedna inštancia nezasahuje do tej druhej. Tzn v tvojom prípade - môžeš si vytvoriť ľubovoľný počet inštancií na triedu Faktura, kde každá môže obsahovať iné dáta. Teraz vytvorenie triedy:

Ak chceš vytvoriť triedu, tak to musíš spraviť pomocou konštruktoru danej triedy, ktorý si môžeš sám napísať. V tvojom prípade do tohto konštruktoru môžeš vložiť celé telo funkcie Vytvor. Konštruktor vyzerá takto:
Kód:
constructor TFaktura.Vytvor( nieco: integer );
begin

    // sem pride inicializacia a podobne

end;

Potom si možeš vytvoriť trebárs dve faktúry:
Kód:
var
  faktura1, faktura2: TFaktura;
begin

  faktura1 := TFaktura.Vytvor( 100 );
  faktura2 := TFaktura.Vytvor( 500 );

end;

Prepojenie si mal na mysli zrejme niečo také, že faktura1 má nejaký údaj, ktorý chceš spracovať aj vo faktura2. Ak áno, to je samozrejme možné. Proste v tride TFaktura vytvoríš funkciu, ktorá bude brať ako parameter objekt triedy TFaktura. Napríklad:
Kód:
procedure TFaktura.ZdielajData( inaFaktura: TFaktura );
begin

  meno := inaFaktura.meno;

end;


Neviem, či som odpovedal na všetky otázky a či dostatočne výstižne, v každom prípade sa opýtaj, ak ešte niečo robí problém.


Offline

Užívateľ
Užívateľ
Triedy a práca s nimi

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok Napísal autor témyOffline : 23.08.2010 14:44

Fico, díky za vyčerpávajúcu odpoveď, veľmi mi ujasnila situáciu :) Podľa všetkého teda vždy musím vytvoriť inštanciu, ak chcem využiť triedu, správne?

Predstavme si inú modelovú situáciu... máme tabuľku používateľov. Aj používateľa by sme mohli využiť ako triedu, nakoľko aj on má nejaké vlastnosti objektov na sebe nezávislé (meno, priezvisko, login, heslo, email).

S používateľom potrebujeme robiť nasledovné veci:
Kód:
TUser.Create(name, surname, login, pass, email: string);
TUser.Update(id: string; name, surname, login, pass, email: string);
TUser.Delete(id: string);


Pracujeme s MySQL - po zavolaní funkcie TUser.Create(...); sa skontroluje či sme vyplnili údaje a či sa už používateľ v DB nenachádza. Ak je všetko OK, vytvoríme ho cez SQL INSERT a tým funkcia končí.

Obdobne sú na tom zvyšné dve funkcie, SQL UPDATE a SQL DELETE.
Je teda aj v tomto prípade nutné vytvárať inštancie? Alebo je možné len nejak zavolať:
Kód:
TUser.Create('Jozef', 'Mocný', 'jozo_power', 'power_jozef', 'jozef@mocny.sk');


Offline

Skúsený užívateľ
Skúsený užívateľ
Triedy a práca s nimi

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 23.08.2010 15:15

Manny píše:
vždy musím vytvoriť inštanciu, ak chcem využiť triedu, správne?
Správne.

Neviem, či som pochopil správne otázku, tak sa teda spýtam: Potrebuješ vytvoriť inštanciu objektu TUser až po tom, čo si overiš, či sa už nachádzajú informácie o danom userovi v databáze? Ak áno, tak myslím, že je zbytočne na každého usera vytvárať triedu, keďže s userom ako takým sa nenarába, pracuje sa len s jeho údajmi v databáze. Vytvoril by som skôr len jednu triedu, napr TDatabaza, pomocou ktorej by si vytváral, menil a mazal dáta z danej databázy. Príklad:

Kód:
TDatabaza = class
  private:
    // tuna pridu clenske premenne, ktore budeš potrebovať pre danu triedu
  public
    constructor Create( nejaka_inicializacia: integer );    // vytvorenie triedy, inicializacia clenskych premennych, atd
    destructor Destroy; override;   // zrusenie triedy, sem sa zvykne davat uvolnovanie datovych typov, dealokacia pamate, atd
    function existujeTentoUser( meno: string ): boolean;   // funkcia vrati true ak existuje, inak false
    procedure pridajUsera( meno: string );     // prida usera do databazy
    procedure odstranUsera( meno: string );    // odstrani usera z databazy
// a tak podobne, podla toho, co potrebujes
end;


Toto je iba malý príklad, ako som to mal na mysli. Proste bolo by zbytočné mať tam X inštancií na TUser, keď to nie je nutné (za predpokladu, že užívateľov iba pridávaš, edituješ a odoberáš z databázy). Keď som ale zle pochopil otázke, tak ma oprav.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 23.08.2010 19:34

Manny píše:
Fico, díky za vyčerpávajúcu odpoveď, veľmi mi ujasnila situáciu :) Podľa všetkého teda vždy musím vytvoriť inštanciu, ak chcem využiť triedu, správne?


Nie, pokial chces triedu vyuzit iba ako balik metod tak nemusis vytvarat instanciu. Ide o obdobu statickych metod v JAVE

Kód:
program Project4;

{$APPTYPE CONSOLE}

uses
  SysUtils,Dialogs;
type
  TUser = class
  public
    class procedure Create(name, surname, login, pass, email: string);
  end;

  var tt: string;

  class procedure TUser.Create(name, surname, login, pass, email: string);
  begin
    showmessage('name : '+name+chr(10)+'surname : '+surname );
  end;

begin
    TUser.Create('Istvan','Sandokan','','','');
    read(tt);
end.


Offline

Užívateľ
Užívateľ
Triedy a práca s nimi

Registrovaný: 01.10.09
Prihlásený: 12.03.17
Príspevky: 86
Témy: 18
Príspevok Napísal autor témyOffline : 24.08.2010 11:43

Statické triedy, to je ono! Díky moc coldak :)
Fico, aj ty si mi teraz veľmi pomohol, tie praktické príklady sú najjednoduchším vysvetlením funkcionalít tried (spolu s ovocím na http://www.delphibasics.co.uk/RTL.asp?Name=Class). Teraz je mi jasné, že to môžem riešiť buď dynamickou (pomenoval som to správne?) triedou zameranú na databázu, ktorá bude obsahovať metódy na prácu s užívateľmi alebo to spraviť cez statickú triedu.







_________________
Bad news: Time flies. God news: You are the pilot!
Odpovedať na tému [ Príspevkov: 9 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Triedy a sub triedy

v PHP, ASP

5

537

19.04.2010 19:50

emer Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. PC zostava 2000€ práca s videom, programovanie, práca v photoshope atď...

[ Choď na stránku:Choď na stránku: 1, 2 ]

v PC zostavy

37

1801

25.01.2017 9:44

Xaltotun Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Velky rozdiel medzi nimi ?

v Notebooky a netbooky

21

962

30.09.2012 22:22

Xaltotun Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. je medzi nimi rozdiel?

v PC skrinky, zdroje a všetky druhy chladenia

2

770

16.09.2010 17:00

Cirky Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Aký je medzi nimi rozdiel???

v Grafické karty

1

743

28.02.2010 23:42

Malveon Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Spamy a co s nimi ???

v Bezpečnosť a firewally

5

562

14.05.2017 18:30

dusan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Aky je medzi nimi rozdiel?

v nVidia grafické karty

6

830

04.11.2008 10:07

Jaro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Aký je medzi nimi rozdieľ ?

v PC zostavy

2

693

25.09.2009 18:13

Cirky Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Zlozvyky,ako s nimi skoncit?

[ Choď na stránku:Choď na stránku: 1, 2, 3 ]

v Život, životný štýl, móda, bývanie

66

4079

12.02.2012 11:57

Denco1 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Stare Tesly - co s nimi?

v Ostatné

0

447

03.07.2011 18:08

Bojnican Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Forko triedy

v Redakčné systémy

7

730

05.05.2009 21:04

Svolo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Siete triedy B

v Sieťové a internetové programy

1

295

28.01.2013 19:30

majky358 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Mobil strednej triedy

v Mobilné zariadenia

24

1044

15.09.2017 11:54

Nair0n Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. WEBy o moddingu, návodoch ... sem s nimi

v Modifikácie, návody a projekty

3

1342

02.11.2007 21:45

Staffy Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. internetové fora a vaše skúsenosti s nimi

v Krčma

29

5627

04.06.2007 17:51

fuco Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. [Java] Instancia abstraktnej triedy

v Assembler, C, C++, Pascal, Java

6

695

09.08.2010 13:50

crusher100 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra