You are on page 1of 24

Објекти и класи

Нашиот реален свет се состои од објекти (objects). Се што гледаме околу нас се
објекти: дрвја, птици, сонце, деца, куќи, риби, згради, планини, јаболка, автомобили, итн.
Некои објекти не се физички, како: прозорец на оперативниот систем Windows, датотека
запишана на диск, куќна адреса, филм, приказна, број, збор, буква, цифра, сметка во
банка, компјутерска програма, месец, ден во неделата, песна, итн.
Некои објекти се единствена неделива целина: буква, цифра, чаша, монета итн.
Повеќето објекти се составени од помали објекти: број (се состои од цифри), автомобил
(се состои од мотор, каросерија, седишта итн.), месец (се состои од денови).
Некои објекти се различни: птици, дрвја, филмови итн. Некои објекти се слични/,
гулаб, врапче, кокошка, штрк итн. бидејќи се птици. Затоа велиме дека птиците се посебна
група животни. Рибите, исто така се посебна група животни. За групите се користат
термините вид, тип, род или класа. На пример, велиме дека зимзелените дрвја се
посебен вид дрвја, џиповите се посебен тип автомобили. Мачките се посебен род
животни, додека лаптопите се посебна класа компјутери.
Во објектното програмирање се користи терминот класа. На пример, класа
Птици, класа Филмови, класа Триаголници итн.
Секој поединечен објект има свои карактеристики (атрибути).
Објектите кои припаѓаат на една класа имаат исти или слични карактеристики.
На пример:
Птиците имаат: две нозе, две крилја и клун.
Автомобилите имаат: марка, тип, моќност, тркала и седишта.
Прозорците на Windows имаат: тип, форма, големина, менија и копчиња.
Исто така, секој објект има едно или повеќе својства (способности) кои
овозможуваат одредени однесувања.
На пример:
Птиците: одат, летаат, пеат.
Автомобилите: мируваат, се движат, кочат.
Прозорците на Windows: се активни, неактивни, минимизирани.
Според однесувањето може да се одреди каков е тој објект т.е. каква е неговата состојба.
На пример, птицата е во состојба на летање, рибата е во состојба на пливање, прозорецот на
Windows е во активна состојба, процесорот е во состојба на чекање, тревата е во состојба
на растење, автомобилот без кочници е во лоша состојба, итн.
Од до сега реченото може да се заклучи дека секој објект има:
 Идентитет т.е. претставува нешто посебно (според атрибутите),
 Однесување (според неговите способности), и
 Состојба (изразена со неговото однесување во тој момент).

1
Објектите со слични карактеристики и однесувања се од ист вид или од иста класа
(class). На пример, птиците се една класа (имаат исти карактеристики и слично
однесување), додека рибите се друга класа. Куќите се посебна класа објекти,
автомобилите се друга класа објекти итн.
Во некоја класа објекти има поткласи. Пример: Класа Училишта има поткласи:
ОсновниУчилишта и СредниУчилишта. Некоја поткласа може да има свои поткласи,
како на пример поткласата СредниУчилишта има поткласи: Гимназии и СтручниУчилишта.
Ваквиот распоред на класи се нарекува хиерархија на класи.
Програмирањето во кое се користат класи и објекти се нарекува Објектно
Ориентирано Програмирање (ООП). Со него се врши “пресликување” на реалниот свет во
компјутерска програма.
Пример: Машината за пишување се пресликува во компјутерска програма,
училишен дневник се пресликува во програма која претставува електронски училишен
дневник.

Училишта

Средни Основни
училишта училишта

Гимназии Стручни
Училишта
Слика 1. Хиерархиски приказ на класата училишта.

2
Животни

Род
Род Куче
Мачка

Домашна Домашно
Лав Тигар Волк
мачка куче

Слика 2. Хиерархиски приказ на класата животни.

Геометриски
форми

Геометриски Геометриски
фигури тела

Четириаго Триагол Пирами Цилин


Круг Призма Конус Топка
лник ник да дар

Слика 3. Хиерархиски приказ на класата геометриски форми.

Објектите од една класа се слични, ама не се еднакви. Во една класа нема два
еднакви (идентични) објекти. Од ова произлегува дека секој објект е посебен т.е. има свој
идентитет, однесување и состојба.
Во програмските јазици класите можат графички да се претстават со класни
дијаграми.

Pravoagolnik Име на класата Krug


-dolzina: double Атрибути на објектот (со – се -radius: double
-sirina: double означува дека се приватни -
private )
+obem() Функции – методи за објектите +obem()
+plostina() од класата (со + се означува +plostina()
+dijagonala() дека се јавни- public) +dijametar()
3
Терминот приватни атрибути значи дека нив може да ги користи само објектот на
кој му припаѓаат, а не и друг објект. Терминот јавни функции значи дека тие можат да се
извршуваат и на повик од друг објект. На пример, крилјата на гулабот може да ги користи
само гулабот чии се (негови приватни), а не и друг гулаб или друг објект. Ако летањето е
изразено како функција на класата Гулаби, тогаш таа може да се изврши или кога сака
гулабот или кога некој друг објект ќе побара (ќе фрли камен) кон гулабот за тој да лета.
Затоа летањето е јавна функција.
Атрибутите и функциите се нарекуваат членови на класата.
Секој објект од една класа се нарекува примерок или инстанца.
Креирањето објект се нарекува инстанцирање.
Идентитетот на објектот е претставен преку името на објектот. Во една класа не
може да има два објекти со исто име.
Класата претставува еден вид шема (калап, нацрт, план) по која се креираат
(инстанцираат) објекти.

Дефинирање класи и декларирање објекти

Класа во С++ се дефинира на следниов начин:


class imeNaKlasa //zaglavie
{
private:
atribut1; //podatoci clenovi na klasata
….
atributN;
public:
funkcija1 //funkcii clenki na klasata

funkcijaM;
};
Пример1:

4
Пример 2: Да се креира класа книга, а потоа 2 објекти од тој тип.

5
Пример 3: Да се креира класа правоаголник, а потоа 1 објект од тој тип за кој ќе се
пресмета плоштина и периметар.

Зборовите public и private се нарекуваат модификатори или спецификатори на


пристап. Со нив може да кажеме кои членови од класата ќе се достапни надвор од неа.
Доколку го испуштиме спецификаторот, тогаш се подразбира дека сите членови се private.
Атрибутите во класата обично се private. Во претходната програма тоа ќе значи
дека од надвор (од главната функција main ) веќе не можеме да ја прочитаме или
доделиме вредноста на променливата radius.

Директен пристап до членови на класата

Пристапот до функциите од јавниот дел на класата е директен со операторот точка.


Функциите се членови на класата, исто како и податоците. И пристапот до податоците
може да биде директен со операторот точка, само ако се тие јавни членови на класата.
Директен пристап до приватните податоци/членови не е дозволен.
На пример, ако во главната функција ставиме наредба за директен пристап до
приватните податоци, ќе добиеме порака за грешка дека не може да пристапи до
податоци во класата кои имаат приватна декларација.

За таа цел постојат функции SET-ери, кои ја поставуваат вредноста на


променливите и функции GET – ери кои ја земаат вредноста на променливите таму каде
што ни треба.

6
Да се направи програма во која ќе се дефинира класата Pravoagolnik, во која ќе се декларираат две
променливи кои претставуваат атрибути на објектите од класата Pravoagolnik. Во класата се
дефинираат следните функции:
 postavistrani() , која ќе ја користиме за поставување вредности на полињата (атрибутите) на
објект од класата Pravoagolnik. Во С++ и другите ООП јазици се користат посебни функции
за поставување (set) податоци на полињата на класата, наречени постави-функции или set-
функции. Листата на параметри на оваа функција е
(double stra, double strb) и се користи само за пренос на аргументите во полињата на
класата, при повик на функцијата. Тоа се прави со наредбите во телото на функцијата:
a=stra;
b=strb;
Потоа полињата стануваат променливи a и b и можат да се користат во сите функции на
класата.
 Функција zemio() ја пресметува обиколката на правоаголникот и ја враќа со наредбата
return ob;
 Функција zemip(),
 Функција zemid().

7
8
Пример – Училиште.

9
Конструктор

Конструктори се специјални функции кои се користат за иницијализација


(задавање почетни вредности) на променливите на објектите (инстанците) при нивното
креирање. Притоа, конструкторот на класата е функција која прва се повикува при
креирање на секој нов објект.
Конструкторот мора да има исто име со класата.
На пример, во претходните програми со наредбите:
Uciliste naseuciliste;
Krug krug1;
ги користиме конструкторите Krug и Uciliste. Овие конструктори ги нарекуваме
подразбирливи конструктори (default constructors). При креирање на секоја класа, ако
таа нема конструктор, преведувачот автоматски обезбедува подарзбирлив конструктор.
Конструкторите не враќаат вредност.
Конструкторот вообичаено е без параметри, но може да има параметри.
Со повик на конструкторот, преку полињата на класата, во меморијата се креираат
променливи за секој новокреиран објект.
За да ги иницијализираме променливите на креираните објекти, треба да им
поставиме почетна вредност преку конструкторот на класата, слично како што
поставуваме вредности преку функции за поставување - PostaviStrani, Setr и др.

10
Во функцијата main креираме два објекти. Секогаш кога креираме објект автоматски се
извршува конструкторот.

Конструкторот може да прифаќа и параметри. Ако конструкторот има параметри, тогаш и


објектот треба да ги има истите параметри. Тоа ќе го видиме во следниот пример.
Конструкторот ги печати параметрите на објектот.

11
Користењето на конструктор со параметри е исто како и секоја друга функција.
Затоа се нарекува и конструкторска функција. При повик на конструктор со параметри,
треба да се совпаѓаат бројот, редоследот и типот на аргументите со параметрите во
дефиницијата на конструкторот.

Конструкторот може да биде искористен кога креираме објекти. Наместо да


пишуваме book1.title, book1.author, book1.pages, потоа за book2 и т.н. за повеќе книги,
иницијализација може да се изврши преку конструктор.

12
Вредностите на членовите на објектот потоа може да се менуваат.

13
Може да креираме повеќе конструктори. Ќе креираме уште еден конструктор без
параметри. Потоа ќе креираме објект Book3, на кој нема да му дадеме параметри.
Неговата иницијализација ќе ја направи конструкторот без параметри.
Со повеќе конструктори на корисникот му даваме можност на повеќе начини да
креира објекти.

Бидејќи конструкторите имаат исти имиња, велиме дека се врши преоптоварување на


конструкторите (overloading constructors). Тоа е, всушност, преоптоварување на
функциите бидејќи конструкторите се функции.

14
15
Во следниот пример, во класата училиште додаваме уште еден конструктор со два параметри:
string uciliste, string mesto.

Во главната функција за иницијализација на објектот vaseuciliste се повикува конструкторот со два


параметри.
Класниот дијаграм на класата Uciliste дополнет со конструкторите е даден на следната слика.
Uciliste
-imenauciliste:string
imenamesto:string
<<constructor>> + Uciliste(uciliste:string)
<<constructor>> + Uciliste(uciliste:string, mesto:string )
+postaviimenauciliste(uciliste:string)
+postaviimenamesto(mesto:string)
+zemiimenauciliste():string
+zemiimenamesto():string
Prikaziuciliste()

16
Дефинирање на функциите членки надвор од класата
Функциите членки на класата може да се дефинираат и надвор од класата. Притоа,
во класата се наведува само прототипот на функцијата.
Прототип на функција се состои од нејзиното име, типот на повратната вредност и
листата на параметри.
На пример класата Uciliste ќе го има следниот облик:

Нејзините функции членки се дефинираат надвор од класата. При извршување на


апликацијата резултатот ќе биде ист.
Бидејќи во една датотека (апликација, програма) може да има повеќе класи, при
дефинирање на некоја функција надвор од класата, мора да се означи на која класа
припаѓа функцијата. Тоа се постигнува со операторот :: кој се нарекува бинарен оператор
за разрешување на опсегот (binary scope resolution operator). Со него се означува
припадност на податокот или функцијата на класата на која припаѓа.

17
18
Пример 2: Апликација со две класи и функции членки дефинирани надвор од
класите.

19
Функции како елементи на класата (Object functions)
Да креираме класа студент, конструктор кој ќе ни овозможи да ги иницијализираме
податоците во објектите и два објекти од класата студент.

20
Сакаме да провериме кои студенти имаат просек поголем од 8.5. За таа цел ќе ја
креираме функцијата soliden_student во класата.

21
Getters & Setters
Овие функции се важни во С++. Тие ни овозможуваат да го контролираме пристапот до различни
атрибути во класата. Ќе направиме класа филмови.

Може да ја отпечатиме вредноста на rating на филмот затоа што податоците се јавни.

Ако параметарот rating го ставиме во групата private, нема да може да го отпечатиме.


Само наредбите од класата може да пристапат до rating, но не и наредбите од функцијата main.
Имаме пристап до rating внатре во конструкторот затоа што тој е во иста класа.
Во класата ќе дефинираме public функција која ќе ја постави вредноста на параметарот
rating.
Параметарот rating може да ги прими следните вредности:
 G (General Audiences)- дозволено за сите возрасти,
 PG (Parental Guidance Suggested) – родителски надзор,
 PG-13 (Parents Strongly Cautioned) – строг родителски надзор за деца под 13
години,
 R-Restricted- ограничен,
 NR – не е рангиран .
Овие вредности се дозволени да бидат внесени од страна на корисникот како вредност на
параметарот rating.
Често во С++ треба да може да контролираме која информација може да биде
зачувана за секој филм посебно. Дозволени вредности за rating се: G, PG, PG-13, R,

22
NR, но ништо не нè спречува да внесеме каква било вредност – Пр- “kuce”, и тоа ќе
биде отпечатено.
Ова може да се спречи со функциите GETERS & SETERS.

Прво што треба да направиме е параметарот rating да го направиме private.


Сега само кодот во класата Film може да пристапи до параметарот rating. Не може
да го отпечатиме параметарот rating. Немаме пристап до параметарот rating од
функцијата main.
Секогаш кога ќе доделувамe вредност на rating, ќе го правиме тоа преку
функцијата setRating.

Во делот public на класата Film ќе креираме public функција setRating. Кога ќе


доделуваме вредност на rating, тоа ќе го правиме преку функцијата setRating. Во setRating
ќе поставиме одредени правила за тоа кои вредности ќе бидат валидни (G, PG, PG-13, R,

NR). Тоа го правиме со if наредба. Ако некој внесе некоректен податок, на rating му се
доделува вредност NR. На тој начин ние може да контролираме кои вредности ќе бидат
внесени како параметри на објектите.

Ние не може да ја печатиме вредноста на rating затоа што е private. Заради тоа ќе
дефинираме функција getRating која ќе враќа вредност на параметарот rating.

23
24

You might also like