I.
Základné pojmy a kľúčové slová
Výraz,
kľúčové slovo
|
Popis
|
Zdroje, odkazy
|
Trieda
|
Definícia nového
typu, predpisu pre objekty.
|
|
Objekt
|
Inštancia typu.
Reálny objekt s identitou.
|
|
Modifikátory
prístupu
|
Kľúčové slová ovplyvňujúce
povolenie k prístupu k danému prvku (triede, metóde ...). podporované
modifikátory prístupu v jazyku C# sú: public, protected, private,
internal, protected internal.
|
|
Členy
tried
|
To, čo sa môže
nachádzať v triede. V jazyku C# sú to metódy, členské premenné (fields) a
vlastnosti (properties).
|
|
Metódy
|
Metódy triedy
implementujú správanie danej triedy. Pojem metóda je iba iným zápisom pojmu
funkcia z jazyka C.
|
|
Konštruktor
|
Špeciálna metóda
triedy použitá pre vytvorenie a inicializáciu inšancie triedy (teda pre
vytvorenie objektu). Musí spĺňať tieto podmienky: má rovnaké meno ako trieda,
nemá návratovú hodnotu.
|
|
Štandardný
(default) konštruktor
|
Konštruktor bez
parametrov, ktorý je v .NET vygenerovaný automaticky, pri neprítomnosti iného
konštruktora v tele triedy.
|
|
this
|
Toto kľúčové slovo
odkazuje na aktuálny objekt (aktuálnu inštanciu triedy)
|
|
Členské
premenné (fields)
|
Premenné vyjadrujúce
vnútorný stav objektu triedy, alebo samotnej triedy. Z angličtiny sa
neprekladá ako polia, pretože pojem polia už v programátorskom slovníku
existuje pre označenie priestoru pre uloženie niekoľkých položiek rovnakého
typu.
|
|
II.
Prídavné informácie k cvičeniu
Vytváranie nových typov
Tradičné procedurálne programovacie jazyky poskytujú množinu dátových
typov presne ako jazyk C#. Príkladmi týchto typov sú int, long, char, string,
... . Inovácia OO jazykov (ako C++, C# a Java) je, že používateľ môže do
programu pridávať vlastné typy, ktoré reprezentujú "veci" v jeho
problémovej doméne.
Doména problému (The problem domain) je samotná problematika, oblasť, ktorú sa vývojár snaží modelovať,
alebo inak riešiť vo svojom programe. Pre komerčné programy je touto doménou
väčšinou oblasť obchodu (ako napríklad záznamy o predaji, alebo iné
marketingové záležitosti). Problémová doména môže byť o akejkoľvek úlohe, ktorá
je pri programovaní vytýčená. Ak povedzme pracujete na nejakej bojovej
simulácii potom je Vašou doménou problému povedzme charakteristika bojových
podmienok, použité zbrane, alebo terén.
Táto schopnosť
rozšírenia jazyka o nové typy je veľmi mocným nástrojom. Nové typy v jazyku C#
sa vytvárajú kľúčovým slovom class (trieda). Triedy majú správanie a
majú aj svoj stav. Správanie modelujeme pomocou metód (v nie OO jazykoch
sú tieto nazývané procedúry, alebo funkcie). Rovnako máme členy tried pre reprezentáciu
stavu, tieto členy nazývame členské premenné, alebo premenné triedy (sú
to vlastne premenné známe z nie OO jazykov). Jazyk C# má tiež jednu špecialitu,
ktorou sú vlastnosti (properties). Tieto sú akési virtuálne premenné,
ktoré poskytujú objektový prístup k skutočným členským premenným, navyše ale
poskytujú možnosť pridať rôzne akcie k operácii čítania, alebo zápisu do
členskej premennej. Svojim spôsobom nahradzujú metódy pre prístup k zapuzdreným
členským premenným (niekedy sa tieto nazývali settery, alebo gettery).
Triedy vs. objekty
Hlavný rozdiel medzi
triedou a objektom je, že trieda je definíciou nového typu, je akýmsi
predpisom, a objekt je inštanciou tohto typu s alokovaným miestom v pamäti, s
vlastnou identitou
Definícia triedy v jazyku
C#:
[atribúty][modifikátory prístupu] class identifikátor [:základná
trieda] [telo triedy]
Modifikátory
prístupu
Možné modifikátory prístupu
pre triedy a pre členy tried vo väčšine OO jazykov sú:
• public
• private
• protected
Jazyk C# navyše pridáva modifikátory
prístupu pre obmedzenia v rámci jednej kompletácie aplikácie (assembly):
• internal
• protected internal
Public access (verejný prístup) že daný člen takto označený
je viditeľný a použiteľný z akéhokoľvek miesta programu (z akejkoľvek triedy).
Private access (súkromný prístup) znamená, že člen je viditeľný iba v
rámci triedy, kde bol definovaný (nikde inde, v žiadnej inej triede).
Protected access (chránený prístup) je ako súkromný prístup,
okrem toho, že k daným členom majú prístup aj triedy (a samozrejme aj ich
inštancie), ktoré sú odvodené od triedy, v ktorej je daný člen definovaný.
Internal access (vnútorný prístup) Týka sa kompletácie (assembly). Je
ako súkromný prístup, s tým že členy takto označené sú viditeľné triedam v
rámci celej kompletácie (assembly). Assembly je základnou jednotkou vytvárania
aplikácie. Za assembly je možné považovať povedzme jeden spustiteľný súbor.exe,
alebo jednu knižnicu .dll.
Protected internal (chránený vnútorný prístup) je zjednotením vnútorného
a chráneného prístupu (internal + protected), tzn. : trieda (alebo metóda) je
súkromná (private) pre všetky triedy, okrem odvodených tried a tried v rovnakej
assembly.
Členy
tried
Triedy pozostávajú z metód,
členských premenných a vlastností (properties).
Metódy
Metódy triedy
implementujú správanie danej triedy. Všetky metódy v C# patria do nejakej z
definovaných tried (metóda sa nemôže nachádzať mimo triedy). Metóda môže mať
parametre, ale samozrejme to nie je vyžadované. Metóda môže mať akýkoľvek počet
parametrov a každý z nich musí mať definovaný typ. Metóda taktiež môže vracať
hodnotu, čo je indikované návratovým typom metódy uvedeným v definícii pred jej
identifikátorom.
// nazov
metody je "MyMethod", vracia int, nema parametre
public int myMethod();
// nazov metody je
"SecondMethod", vracia double, ocakava 2 argumenty
public double SecondMethod(int p1, string p2);
// vracia void (teda nic) a ma 1 parameter typu int (ocakava 1
argument typu int)
public void ThirdMethod(int x);
Konštruktor
Konštruktor je špeciálna metóda triedy, použitá pre vytvorenie správne
inicializovanej inštancie triedy. Konštruktor musí mať rovnaké meno ako samotná
trieda, v ktorej je definovaný. Konštruktory tiež nesmú mať definovanú žiadnu
návratovú hodnotu, ani typu void. Účelom konštruktorov je vytvoriť
inštanciu a inicializovať hodnoty jej členov na implicitné hodnoty. Volanie
konštruktora je vykonané prekladačom, Vaše programy preto nikdy nebudú žiadny
konštruktor volať explicitne v zdrojovom kóde.
public class
Student
{
//clenske
premenne
private int
studentAge;
private string
studentName;
//Specialna
metoda - konstruktor
public
Student(int age, string
name)
{
//inicializacia
clenskych premennych
studentAge
= age;
studentName = name;
}
}
Štandardný konštruktor (default constructor)
Konštruktor
je z pohľadu parametrov ako metóda, môže mať ľubovoľný počet parametrov, teda
aj žiadne. V tomto prípade, ak konštruktor neočakáva žiadne argumenty, je
nazývaný štandardný konštruktor. Ak v triede nešpecifikujeme žiadny
konštruktor, do výsledného skompilovaného kódu bude automaticky vygenerovaný
štandardný konštruktor inicializujúci členské premenné na štandardné hodnoty
(napríklad čísla int na hodnotu 0, ...). Takto vyzerá štandardný konštruktor s
prázdnym telom:
// standardny
konstruktor
public
Student()
{
}
Kľúčové
slovo this
Kľúčové slovo this predstavuje
referenciu na aktuálny objekt. V konštruktore kľúčové slovo this
referuje na objekt, ktorý je vytváraný. Je bežné pomenovávať súkromné členské
premenné rovnakým menom ako argumenty odovzdávané konštruktoru. V tomto prípade
sa kľúčové slovo this používa na odlíšenie členských premenných od
parametrov:
public class
Student
{
private int
age;
private string
name;
public
Student(int age, string
name)
{
//pouzitie
this na odlisenie clenskych premennych a parametrov konstruktora
this.age
= age;
this.name = name;
}
}
Členské premenné
Niekedy sa členské premenné nazývajú aj premenné triedy,
alebo ako anglické fields. Úloha členských premenných je uchovávanie stavu
objektu. Definícia členských premenných je veľmi podobná ako definícia
lokálnych premenných v metódach, rozdiel je len v tom, že sa nachádzajú v tele
triedy, mimo tela metódy a je možné pred ich definíciu pridať špecifikátor
prístupu:
private int age = 18; //sukromna clenska premenna typu int,inicializacia pri
definicii hodnotou 18
private string name = “noname”; //sukromna clenska premenna typu string, inicializacia
pri definicii retazcom "noname"
Ak
nešpecifikujeme modifikátor prístupu (v tomto prípade private), členy
tried sú implicitne považované za súkromné (private). Toto podporuje
skrývanie dát a tým základnú vlastnosť OOP - uzavretosť (encapsulation).
Vytváranie
inštancií
Akonáhle je
objekt inštanciovaný (je vytváraná jeho inštancia), je zavolaný konštruktor
triedy, ktorej objekt je vytváraný. Inštanciu triedy, teda objekt, vytvárame
pomocou kľúčového slova new:
//vytvorenie instancie triedy Student a
ulozenie referencie na nu do premennej stud typu Student
Student stud = new
Student();
Táto
konštrukcia je v jazyku C# veľmi často používaná: Typ identifikator = new Typ(); // !!!
(Ako ste si
iste všimli, vo Visual Studiu .NET je kľúčové slovo new označené modrou
farbou. Takto sú označované všetky kľúčové slová, aby neboli omylom použité ako
názvy premenných, čo by vyvolalo chybu).
Príklady
vytvárania inštancií:
Dog rex = new
Dog();
Button btOK = new Button(“Ok”); //vytvorenie instancie, vola sa konstruktor s jednym string parametrom
Student fero = new
Student(23,”Fero”);//vytvorenie instancie, vola sa konstruktor s dvoma parametrami
Akonáhle
máme vytvorenú inštanciu, je možné na objekte volať metódy:
fero.DisplayInfo(); // volanie metody
na objekte fero
Preťažovanie
konštruktora
Je možné vytvoriť viac ako jeden konštruktor v jednej triede. Toto je
známe pod pojmom preťažovanie (overloading) konštruktorov a poskytuje
možnosť pripraviť viacero konštruktorov s rôznymi parametrami pre viacero
možností inštanciovania objektu. Preťaženie konštruktora (alebo akejkoľvek inej
metódy) sa vykonáva modifikáciou signatúry. Signatúra je popis metódy pre
kompilátor a zahŕňa meno metódy a zoznam parametrov metódy. Keďže trieda môže
obsahovať viacero metód odlišujúcich sa v signatúre (meno + parametre), tieto
metódy sa môžu líšiť v mene (čo je vlastne odlíšenie úplne inej metódy), alebo
v parametroch (čo je preťažovanie). Odlišnosť v parametroch metódy môže byť buď
v ich počte, alebo v ich typoch (alebo v oboch). Takto môžeme mať napríklad v
jednej triede aj tri konštruktory (alebo aj metódy), prvý majúci jeden
parameter typu string, druhý majúci jeden parameter typu int (čo
je vlastne modifikácia typu parametra, teda iná signatúra) a tretí s dvoma
parametrami typu string (modifikácia počtu parametrov v signatúre, opäť
iná signatúra).
III.
Úlohy
1. Otvorte novú konzolovú aplikáciu v prostredí Visual Studio .NET
a pomenujte ju Person.
Premenujte triedu Class1 na Person.
2. Definujte v tejto triede nasledujúce súkromné členy: name
a surname.
3. Vytvorte novú triedu Address s nasledovnými
verejnými reťazcovými členmi (string) address, city,
state a zipCode.
4. Vložte do triedy Person novú členskú premennú s
názvom address typu Address.
5. Vytvorte konštruktor Person s 3 parametrami: name,
surname, address.
6. Pridajte do triedy Person metódu Info(
), ktorá zobrazí všetky informácie o aktuálnom objekte osoby.
7. V statickej metóde Main vytvorte inštancie dvoch
osôb a vypíšte informácie o nich do konzoly (s pomocou už vytvorenej metódy Info).
IV.
Zhrnutie
1 C# poskytuje možnosť rozšíriť preddefinované typy o
používateľsky definované typy pomocou tried.
2 Nový typ sa definuje pomocou kľúčového slova class.
3
Inštancie tried
nazývame objekty.
4
Prístup k triedam
a ich členom je možné kontrolovať pomocou modifikátorov prístupu: public, private,
protected, internal, a protected
internal.
5
Triedy v jazyku C#
pozostávajú z metód, členských premenných a vlastností (properties).
6
Konštruktor je
špeciálnou metódou zodpovednou za vytvorenie a inicializáciu inštancie triedy.
7
Kľúčové slovo this vytvára referenciu na aktuálny objekt.
8
Všetky metódy môžu
byť preťažené zmenou ich signatúry.
Žiadne komentáre:
Zverejnenie komentára