[ 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 | 18
NapísalOffline : 09.08.2010 16:33 | Triedy a práca s nimi

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é?


Online

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

Registrovaný: 11.01.09
Prihlásený: 23.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 09.08.2010 17:12 | Triedy a práca s nimi

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 | 18
Napísal autor témyOffline : 20.08.2010 13:57 | Triedy a práca s nimi

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 | 2
NapísalOffline : 20.08.2010 14:31 | Triedy a práca s nimi

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


Online

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

Registrovaný: 11.01.09
Prihlásený: 23.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 20.08.2010 14:41 | Triedy a práca s nimi

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 | 18
Napísal autor témyOffline : 23.08.2010 14:44 | Triedy a práca s nimi

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');


Online

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

Registrovaný: 11.01.09
Prihlásený: 23.11.24
Príspevky: 1395
Témy: 10 | 10
Bydlisko: Hrinova
NapísalOnline : 23.08.2010 15:15 | Triedy a práca s nimi

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 | 2
NapísalOffline : 23.08.2010 19:34 | Triedy a práca s nimi

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 | 18
Napísal autor témyOffline : 24.08.2010 11:43 | Triedy a práca s nimi

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!
 [ Príspevkov: 9 ] 


Triedy a práca s nimi



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

582

19.04.2010 19:50

emer

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

1910

25.01.2017 9:44

Xaltotun

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

Velky rozdiel medzi nimi ?

v Notebooky a netbooky

21

1039

30.09.2012 22:22

Xaltotun

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

827

16.09.2010 17:00

Cirky

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

Aký je medzi nimi rozdiel???

v Grafické karty

1

799

28.02.2010 23:42

Malveon

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

Spamy a co s nimi ???

v Bezpečnosť a firewally

5

600

14.05.2017 18:30

dusan

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

Aky je medzi nimi rozdiel?

v nVidia grafické karty

6

863

04.11.2008 10:07

Jaro

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

Aký je medzi nimi rozdieľ ?

v PC zostavy

2

731

25.09.2009 18:13

Cirky

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

4182

12.02.2012 11:57

Denco1

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

Stare Tesly - co s nimi?

v Ostatné

0

479

03.07.2011 18:08

Bojnican

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

Forko triedy

v Redakčné systémy

7

767

05.05.2009 21:04

Svolo

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

Siete triedy B

v Sieťové a internetové programy

1

325

28.01.2013 19:30

majky358

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

Mobil strednej triedy

v Mobilné zariadenia

24

1087

15.09.2017 11:54

Nair0n

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

1374

02.11.2007 21:45

Staffy

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

5697

04.06.2007 17:51

fuco

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

Wifi-Router do triedy

v Ostatné

1

462

22.04.2011 20:40

rastis



© 2005 - 2024 PCforum, edited by JanoF