OOP

 https://www.w3schools.com/cpp/cpp_oop.as


Прашања:

1. Според начинот на пресметување програмските јазици ги делиме на 2 групи. Кои се тие ?
2. Која е разликата помеѓу процедуралните и објектно ориетираните јазици?
3. Кој е првиот јазик кој вовел објекти и класи ?
4. Што е ООП? Кои се предностите на ооп во однос на процедуралното програмирање
5. Објасни го принципот "Don't Repeat Yourself" (DRY)
6. Што е класа, а што објект ? Примери за класа и објекти
7. 


8. Како се дефинира класа?
9. Атрибутите и методите се во основа променливи и функции кои припаѓаат на класата. Тие често се нарекуваат „членови на класата“. Објасни !

Процедурално / Објектно

Процедуралното програмирање користи листа на инструкции за извршување одредена задача чекор по чекор. Се темели на процедури. Познати се и како top-down јазици, односно процедурите се извршуваат редоследно одгоре надолу. Процедуралнои јазици : Fortran, Cobol, C, Basic, Pascal

Првиот ОО јазик  Simula ја воведува идејата за објекти, како збир на информации кои се третираат како единствен елемент. 

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

Основна разлика помеѓу процедурално и OOP програмирање:

🔹 Процедурално програмирање

Се темели на функции/процедури.
Програмата е организирана како низа од чекори (инструкции).
Податоците и функциите се одделени.
Фокусот е на што треба да се изврши.

🔹 Објектно-ориентирано програмирање (OOP)

Се темели на објекти и класи.
Податоците и методите се обединети во објекти.
Фокусот е на кој го извршува однесувањето.
Се базира на: енкапсулација, апстракција, наследување и полиморфизам.

📌 Суштинска разлика:

Процедуралното програмирање е ориентирано кон функции, додека OOP е ориентирано кон објекти (моделирање на реалниот свет преку објекти).

  Податоци од тип објект и класа

Наместо да размислуваме за кодот како низа од наредби, замислете дека градиме свет со „нешта“ (објекти).

Дискусија: Погледнете околу себе. Секој предмет е Објект. На пример, еден Автомобил.

  • Што поседува тој? (Боја, модел, брзина) — Ова се Податочни членки.

  • Што може да прави? (Забрзува, кочи, свири) — Ова се Функции-членки.

Вештачка интелигенција (AI) активност:

Отворете ChatGPT или друг AI четбот и напишете: „Опиши го објектот 'Паметен телефон' преку неговите карактеристики и акции како да си програмер.“ Споредете ги одговорите.

Класите го дефинираат објектот ( тие содржат атрибути и методи кои објектот треба да ги има). Токму затоа најнапред се креираат класи врз основа на кои се креираат објекти. Класа претставува нацрт (калап, модел, шаблон) на објект,што не наведува до заклучок дека клаите може да имаат повеќе објекти .

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

Објекти кои содржат ист тип на податоци и одговараат на пораки на ист начин припаѓаат на иста фамилија објекти односно припаѓаат на иста класа. Во ООП примарниот концепт е класа, и произволен број објекти (од иста фамилија) може да се креираат користејќи ист модел/ нацрт/ шаблон.  Класите за објектите се она што се нацртите за куќите – класа е план за градење на објект од таа класа. Исто како што може да се изградат многу куќи од еден нацрт, може да се инстанцираат многу објекти од една класа.

Нека е даден нацрт/план  за автомобилНацртот не може да се вози – тоа значи и класата не може да  се „вози“.   Значи треба да се конструира автомобил за истиот да може да се вози , што значи дека  мора да се креира објект од класата  за да може да се извршуваат функциите на класата.

Што е Класа, а што Објект?

·       Класа: Нацрт-план или рецепт (пр. Рецепт за торта).

·       Објект: Конкретен пример направен според планот (пр. Самата торта на масата).


Концептот на „Црна кутија“ vs. „Отворена кутија“

Ако имате далечинско за телевизор, дали треба да знаете како се поврзани жиците внатре за да го смените каналот?“
· Дискусија: во програмирањето, класата е кутија.
· Јавен пристап (public): Тоа се копчињата на далечинското кои се достапни за сите. Ако нешто е public, секој може да го види и користи.
· Податочни членки: Тоа се карактеристиките (пр. боја на далечинското).
· Функции-членки: Тоа се акциите (пр. копчето „Power“).

Пристап до elemenтите - членки на класа 

За да пристапите до елементите на класа , го користите операторот точка (.).










Акција

Код

Креирање објект

ImeNaKlasa  mojObjekt;

Пристап до податок

mojObjekt.broj = 10;

Повикување функција

mojObjekt.akcija();





Дефинирање на функции членки на класа

                a. во дефиницијата на класа - Insid

                b. надвор од  дефиницијата на класа – Outside.

class MyClass { // The class
public: // Access specifier
void myMethod() { // Method/function defined inside the class
cout << "Hello World!";
}
};

int main() {
MyClass myObj; // Create an object of MyClass
myObj.myMethod(); // Call the method
return 0;
}

class MyClass { // The class
public: // Access specifier
void myMethod(); // Method/function declaration
};
// Method/function definition outside the class
void MyClass::myMethod() {
cout << "Hello World!";
}

int main() {
MyClass myObj; // Create an object of MyClass
myObj.myMethod(); // Call the method
return 0;
}


Што ќе се прикаже  во следниот сегмент 
 class primer
  {  public:
     int x; 
     int Broj()
     { return 100%10; }
   };

int main()
{ primer obj;
  obj.x=100; cout<<"x="<<obj.Broj()<<endl; 
  return 0;
}
Плоштина и периметар на павоаголник 

#include<iostream>
using namespace std;
class Pravoagolnik {
public:                              // specifikarot na pristap
float plostina (float a, float b) {     //  funkcija
float p=a*b;
 return p;   }
 float perimetar(float a, float b) {   // funkcija
 float l=2*(a+b);
 return l;   }
};
int main()
{
float a, b;
 Pravoagolnik obj;                                // object obj od tipot class 
 cout<<"Vnesi dimenzii na pravoagolnik: ";
 cin>>a>>b;
 cout<<"Plostina: "<<   obj.plostina(a, b) <<endl;  // pristap do f-jata Plostina 
 cout<<"Perimetar: "<<  obj.perimetar(a, b) ;
 return 0;
}


Одговори на прашањата !!!
1. Што дефинираме со „Класа“ во C++?

) Конкретна вредност во меморијата.
Б) Кориснички дефиниран тип кој служи како „нацрт-план“ за објекти.
В) Само листа од функции без податоци.

2. Кој оператор се користи за пристап до податочните членки и функциите на еден објект?
            А) Стрелка (->)
            Б) Две точки (::)
            В) Точка (.)

3. Што означува клучниот збор public: во дефиницијата на класата?
      А) Дека членовите се достапни само во внатрешноста на класата.
      Б) Дека членовите се достапни за користење надвор од класата (на пр. во main).
      В) Дека класата е достапна на интернет.

4. Пронајди ја грешката во следниов код:
class Ucilnica {
public:
int brojNaUcenici;

  5. Поврзи ги поимите со нивното значење (со линија):

Поим

Опис

Податочна членка

Акција или однесување на објектот

Функција-членка

Конкретна инстанца на класата

Објект

Карактеристика или променлива на класата


Разгледај го примерот (за дома )

#include <iostream>
    using namespace std;
class Student {
private:
    int ocena; // Приватен податок
public:
    // SETTER - Поставува вредност со контрола
    void setOcena(int o) {
        if(o >= 1 && o <= 5) {
            ocena = o;
        } else {
            cout << "Грешка: Невалидна оцена!" << endl;
        }
    }
    // GETTER - Ја чита вредноста
    int getOcena() {
        return ocena;
    }
};

int main() {
    // 1. Креирање на објект од класата Student
    Student ucenik1;
    // 2. ОБИД ЗА ДИРЕКТЕН ПРИСТАП (Ова ќе предизвика грешка при компајлирање!)
    // ucenik1.ocena = 5; 
        cout << "--- Тестирање на сетер со валидна вредност ---" << endl;
    ucenik1.setOcena(5); // Поставуваме оцена 5
    cout << "Оцената на ученикот е: " << ucenik1.getOcena() << endl;
    cout << "\n--- Тестирање на сетер со НЕВАЛИДНА вредност ---" << endl;
    ucenik1.setOcena(10); // Ова ќе ја активира пораката за грешка во сетерот
        // Вредноста останува старата (5) или почетна, бидејќи 10 е одбиено
    cout << "Тековна оцена по обидот за грешка: " << ucenik1.getOcena() << endl;
    return 0;
}

Изврши корекција за да внесот на оцена  е преку тастатура 


No comments: