Professional Documents
Culture Documents
1 Voved
1 Voved
ОРИЕНТИРАНИ
КОНЦЕПТИ
ОБЈЕКТНО ОРИЕНТИРАНА АНАЛИЗА И ДИЗАЈН - предавања
Структурно програмирање
1
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Структурно програмирање
int main()
{
int x = 1, y = 5;
printf(‘X + Y = %d\n’, zbir(x,y));
printf(‘X – Y = %d\n’, razlika(x,y));
return 0;
}
Објектно-ориентирано програмирање
2
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Објектно-ориентирано програмирање
Објектно-ориентирано програмирање
3
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Објектно-ориентирано програмирање
Објектно-ориентирано програмирање
class Matematika
{ private:
int broj1, broj2;
public:
Matematika(int xx=0, int yy=0)
{ broj1=xx; broj2=yy; }
int zbir()
{ return broj1+broj2; }
int razlika()
{ return broj1-broj2; }
. . .
}
int main()
{
Matematika m(1,5); објект
printf(‘X + Y = %d\n’, m.zbir());
printf(‘X – Y = %d\n’, m.razlika());
return 0; класа
}
4
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
5
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Класи и објекти
class Vraboten
{
private:
char ime[50];
int MBR;
int pol;
float bodovi;
public:
Vraboten(const char *ii=””, int mm=0, int pp=0, float bb=0.0)
{
strcpy(ime, ii);
конструктор MBR = mm;
pol = pp;
bodovi = bb;
}
деструктор ~Vraboten() {};
char *getime() { return ime; };
int getMBR() { return MBR; };
int getpol() { return pol; };
float getbodovi() { return bodovi; };
void setime(const char *ii)
{ strcpy(ime, ii); };
void setMBR(int mm) { MBR = mm; };
void setpol(int pp) { pol = pp; };
void setbodovi(float bb) { bodovi = bb; };
}
Класи и објекти
int main()
{
Vraboten v1(“Jovan J.”, 0101985430019, 0, 123.34);
Vraboten v2(“Marija M.”, 2107986450000, 1, 223.05);
Vraboten v3(“Ana A.”, 1302984450001, 1);
}
6
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Класи и објекти
Класи и објекти
v3.setbodovi(v1.getbodovi());
7
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Класи и објекти
class Plata
{
private:
int rb;
char ime[50];
float bodovi;
float plata;
public:
Plata(int rr=0, const char *ii=””, float bb=0.0)
{ Објект од тип
rb = rr;
strcpy(ime, ii); Vraboten
bodovi = bb;
plata = bb * 33.00;
}
~Plata() {};
void setPlata(float bod)
{ plata = bodovi * bod; };
void setPlata(const Vraboten &v, float bod)
{ plata = v.getbodovi() * bod; };
float getPlata()
{ return plata; }; Класа за пресметка на
void print()
{ cout<<rb<<”.”<<ime<<bodovi<<plata<<’\n’; }; платата на даден
} вработен.
Класи и објекти
int main()
{
. . .
// se pretpostavuva deka nema poveke od 100 vraboteni
// tekovniot broj na vraboteni se cuva vo promenlivata tekovno
Plata spisok[100];
Vraboten v[100]; //objektite za vraboten se prethodno vneseni
for(int i; i<=tekovno; i++)
spisok[i] = Plata(i, v[i].getime(), v[i].getbodovi());
spisok[i].setPlata(42.00);
. . .
}
8
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Интерфејси и реализација
Интерфејси и реализација
9
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Интерфејси и реализација
class Tragolnik
{
private:
float a, b, c;
public:
Triagolnik(float aa, float bb, float cc)
{ a = aa; b = bb; c = cc; }; float plostina()
~Triagolnik() {};
float plostina() Нова реализација {
{ на методата float p;
float p, s; p = a * (pow(b,2) - sqrt(pow(a/2,2)))/2.0;
s = (a + b + c); return p;
p = s * (s - a) * (s - b) * (s - c);
return p; };
};
}
int main()
{
Triagolnik t(3, 4, 5);
cout<<”Plostinata na triagonikot e:”<<t.plostina();
return 0;
}
ì
АСОЦИЈАЦИИ ПОМЕЃУ
КЛАСИТЕ
ОБЈЕКТНО ОРИЕНТИРАНА АНАЛИЗА И ДИЗАЈН - предавања
10
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Наследување
ПРИМЕР - Наследување
11
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Наследување
breed = MALTESE
size = SMALL
age = 7
color = WHITE breed = SIAMESE
size = MEDIUM
age = 3
color = WHITE-BROWN
ПРИМЕР - Наследување
ATTRIBUTES METHODS
breed eat(what)
size sleep()
age play()
color
METHODS METHODS
bark() meow()
runAfterBall()
12
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Наследување
class Pet
{
protected:
char *breed, *size, *color;
int age;
public:
Pet(const char *bb, const char
*ss, const char *cc, int aa)
{
strcpy(breed, bb);
strcpy(size, ss);
strcpy(color, cc);
age = aa;
};
~Pet() {};
void sleep();
void play();
. . .
virtual void eat(what:String)=0;
}
ПРИМЕР - Наследување
class Dog : public Pet class Cat : public Pet
{ {
private: private:
void bark() void meow()
{ printf(“Au Au!”); } { printf(“Meow meow!”); }
public: public:
void eat(what: String) void eat(what: String)
{ {
if(strcmp(what,”Bone”)) if(strcmp(what,”Fish”))
printf(“Dogs eat bones!”) printf(“Cats eat fish!”)
else else
bark(); meow();
} }
} }
13
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Наследување
Начини на наследување
Полиморфизам
14
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Полиморфизам
ПРИМЕР - Полиморфизам
Да се дефинира хиерархија на луѓе. За секој човек треба
да се водат податоци за името и презимето, матичниот
број и адресата на живеење. Од оваа класа треба да се
изведат две класи: студент (индекс и просек) и професор
(плата).
Да се обезбеди интерфејс за печатење на податоците за
студентите и вработените во следниот формат:
15
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Полиморфизам
class Covek
{
protected:
char *ime, *prezime, *adresa;
int MBR;
public:
Covek(const char *ii, const char *pp, const char *aa, int mm)
{
strcpy(ime, ii);
strcpy(prezime, pp);
strcpy(adresa, aa);
MBR = mm;
};
~Covek() {};
char *getIme();
char *getPrezime();
int getMBR();
. . .
virtual void pecati()=0;
}
ПРИМЕР - Полиморфизам
class Student : public Covek
{
private:
int indeks;
float prosek;
public:
Student() {}; //soodvetna implementacija na konstruktorot
~Student() {};
// soodvetna implementacija na virtuelnata metoda
void pecati()
{ cout<<getIme()<<” “<<getPrezime()<<” “<<indeks<<’\n’; };
}
16
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Полиморфизам
ПРИМЕР - Полиморфизам
17
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Полиморфизам
class Forma class Krug : public Forma
{ {
public: private:
virtual float plostina()=0; float r;
} public:
Krug(float rr=0.0)
class Triagolnik : public Forma { r = rr; };
{ ~Krug() {};
private:
float a, b, c; float plostina()
public: { return 3.1415*r*r; };
Triagolnik(float aa=0.0, float }
bb=0.0, float cc=0.0)
{ a=aa; b=bb; c=cc; }; class Pravoagolnik : public Forma
~Triagolnik() {}; {
private:
float a, b;
float plostina() public:
{ Pravoagolnik(float aa=0.0, float bb=0.0)
float pl, s; { a=aa; b=bb; };
s=a+b+c; ~Pravoagolnik() {};
pl=s*(s-a)*(s-b)*(s-c)/2.0;
return pl; float plostina()
}; { return a*b; };
} }
Полиморфизам
18
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
Композиција
Композиција
19
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Композиција
ПРИМЕР - Композиција
class Point
{
private:
int x,y;
public:
Point(int xx = 0, int yy = 0)
{ x=xx;
y=yy; };
~Point() {};
void print()
{ printf(“(%d,%d)”,x,y); }
20
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Композиција
class Triangle
{
private:
Point p1,p2,p3;
public:
Triangle(Point &pp1, Point &pp2, Point &pp3)
{
if(pp1.distance(pp2) + pp1.distance(pp3) > pp2.distance(pp3) &&
pp1.distance(pp2) + pp2.distance(pp3) > pp1.distance(pp3) &&
pp2.distance(pp3) + pp1.distance(pp3) > pp1.distance(pp2))
{
p1=pp1;
p2=pp2;
p3=pp3;
}
else
{
printf(“These points don’t define triangle”)
}
};
~Triangle() {};
}
ПРИМЕР - Композиција
21
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Композиција
ПРИМЕР - Композиција
22
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ПРИМЕР - Композиција
class Polaganje int main()
{ {
private: . . .
int ocenka; Polaganje p[100];
Date datum; // naredbi za popolnuvanje na
Student *s; podatocite za polaganjeto
Predmet *p; . . .
public: float prosek=0.0;
Polaganje(int oo=0, Date dd, int kolku=0;
Student &ss, Predmet &pp) for(int i=0;i<100;i++)
{ {
if(oo<5)&&(oo>10) ocenka=5; if (p[i].s->getIndeks()==401)
else ocenka=oo; {
datum=d; kolku++;
s = &ss; prosek+=p[i].getOcenka();
p = &pp; };
}; };
~Polaganje() {}; cout<<”Prosekot na studentot so
int getOcenka() indeks 401
{ return ocenka; }; e:”<<prosek/kolku<<’\n’;
} return 0;
}
ЗАДАЧA ЗА ВЕЖБАЊЕ
23
С. Калајџиски Објектно Ориентирана Анализа и Дизајн - предавања
ЗАДАЧА ЗА ВЕЖБАЊЕ
#include<iostream> class Triagolnik : public Forma
using namespace std; {
private:
class Forma float a, b, c;
{ public:
protected: Triagolnik(float aa=0.0, float bb=0.0, float
cc=0.0):Forma("TRIAGOLNIK")
char *tipForma; { a=aa; b=bb; c=cc; };
public: ~Triagolnik() {};
Forma(char *tip)
{ tipForma = new char[strlen(tip)+1]; float plostina()
strcpy(tipForma,tip); {
}; float pl, s;
~Forma() {}; s=(a+b+c)/2.0;
char *getTip() { return tipForma; }; pl=sqrt(s*(s-a)*(s-b)*(s-c));
return pl;
virtual float plostina()=0; };
virtual float perimetar()=0;
}; float perimetar()
{ return a+b+c; };
};
class Krug : public Forma
{ class Pravoagolnik : public Forma
{
private: private:
float r; float a, b;
public: public:
Krug(float rr=0.0):Forma("KRUG") Pravoagolnik(float aa=0.0, float
{ r = rr; }; bb=0.0):Forma(”PRAVOAGOLNIK")
{ a=aa; b=bb; };
~Krug() {}; ~Pravoagolnik() {};
float plostina()
{ return 3.1415*r*r; }; float plostina()
{ return a*b; };
float perimetar()
{ return 2*(a+b); };
float perimetar() };
{ return 2.0*3.1415*r; };
};
24