Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

veze izmedju klasa - AGREGACIJA. Nacin implementacije?

[es] :: C/C++ programiranje :: veze izmedju klasa - AGREGACIJA. Nacin implementacije?

[ Pregleda: 5018 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon veze izmedju klasa - AGREGACIJA. Nacin implementacije?08.01.2010. u 22:52 - pre 173 meseci
Moze li neko da mi pomogne oko veza izmedju klasa,kod agregacije.Nikako da svarim, pojam mi je donekle jasan ali sam nacin implementacije koda nije.Dobijo sam zadatak, i pokusao nesto saam,ali neide?
Evo zadatka:

Na osnovu dijagrama klasa sa slike treba realizovati program kojim se implementiraju sve
navedene klase. Svaka klasa treba (minimalno) da ima članove prikazane na dijagramu.
Klasa Poligon treba da se definiše kao apstraktna klasa (funkcije članice su čiste virtuelne).
Ostale klase treba da se implementiraju kao konkretne klase, tj. odgovarajuće čiste virtuelne
funkcije članice klase Poligon treba da se definišu (redefinišu) u izvedenim klasama.
Klasa Tacka predstavlja apstrakciju tačaka u koordinatnom sistemu x0y. Svaka tačka opisana je
uređenim parom (x,y), gdje x i y predstavljaju odgovarajuće koordinate u sistemu x0y.
Svaki objekat klase Poligon predstavlja kompoziciju od n (n≥2) tačaka (što je na UML dijagramu
klasa i prikazano kao odgovarajuća kompozicija).
Klasa Duz predstavlja apstrakciju duzi u ravni x0y. Svaku duz definišu dvije tačke: (x1,y1)-
(x2,y2). Za svaku duž može da se dobije dužina.
Klasa Trougao predstavlja apstrakciju trougla u ravni x0y. Svaki trougao definišu tri
(nekolinearne) tačke: (x1,y1)-(x2,y2)-(x3,y3). Za svaki trougao može da se dobije obim i površina.
Klasa Četvorougao predstavlja apstrakciju četvorougla u ravni x0y. Svaki četvorougao definišu
četiri tačke (među kojima ne postoje tri kolinearne tačke): (x1,y1)-(x2,y2)-(x3,y3)-(x4,y4). Za svaki
četvorougao može da se dobije obim i površina.




Ovo je moj pokušaj:

Code:
#include <iostream>

using namespace std;

class Tacka 
{
      public:
             Tacka(double xx,double yy): x(xx),y(yy) {}
      protected:
                double x;
                double y; 
};
class Poligon : public Tacka
{
      public:
             virtual void print()=0;
             virtual double obim() =0;
             virtual double povrsina() =0;
             Tacka *tacka;
};
class Duz : public Poligon
{
      public:
             Duz(double x1,double y1,double x2,double y2): Tacka A(x1,y1),Tacka B(x2,y2) {}
             void print() { cout<<"Duz sa kordinatama:"<<endl;
                             }
};

 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
93.86.93.*



+3 Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?08.01.2010. u 23:21 - pre 173 meseci
Postu dijagram to bi bilo lepo bar samo klase i relacije nemoras artibute i metode da stavis u dijagram.

Klasa poligon ne treba da nasledjuje klasu tacka. to je greska.
 
Odgovor na temu

weeboo
Bojana Borkovic
Banjaluka

Član broj: 152356
Poruke: 48
*.broadband.blic.net.



+3 Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?08.01.2010. u 23:51 - pre 173 meseci
Binary Ruler je u pravu, klasa Poligon ne treba da nasljedjuje klasu Tacka.
Klase Duz, Trougao i Cetverougao odnosno njihovi objekti treba da budu instancirani odredjenim brojem tacaka (u zavisnosti koji lik je u pitanju).
Evo nesto sa predavanja, posto vidim da je zadatak sa ETF-a u BL. ;)





And following our will and wind we may just go where no one's been.
We'll ride the spiral to the end and may just go where no one's been.
Prikačeni fajlovi
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?09.01.2010. u 08:27 - pre 173 meseci
Agregacija se razlikuje od kompozicije po vlasnistvu nad ukljucenim instancama, u kompoziciji ti brines u agregaciji ne. Najdirektniji nacin da pokazes agregaciju je da konstruktor definises tako da prima gotove tacke a ne koordinate tacaka, npr:


Code:

class Duz 
{
      public:
             Duz(Tacka* A, Tacka* B): t1(A),  t2(B) {}
             Tacka* t1;
             Tacka* t2;
...

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?09.01.2010. u 22:06 - pre 173 meseci
zaboravio sam postovati dijagram klasa,pa zato to tek sada radim!
klase i njihove veze
Prikačeni fajlovi
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
93.86.93.*



+3 Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?09.01.2010. u 22:10 - pre 173 meseci
Ne radi ti link tj. nemam pristup. Uploaduj na ES.
 
Odgovor na temu

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?10.01.2010. u 12:21 - pre 173 meseci
Ako neradi link ,evoga upload:

Prikačeni fajlovi
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
93.86.93.*



+3 Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?10.01.2010. u 13:24 - pre 173 meseci
Code:

class Tacka 
{
      public:
             Tacka(double xx,double yy): x(xx),y(yy) {}
             void setX(double xx) {x=xx;}
             double getX() {return x;}
             void setY(double yy) {y=yy;}
             double getY() {return y;}
      private:
                double x;
                double y; 
};
class Poligon
{
      public:
             virtual void print()=0;
             virtual double obim() =0;
             virtual double povrsina() =0;
      protected:
             Tacka *tacka;
};

class Duz : public Poligon
{
      public:
             Duz(Tacka T1, Tacka T2){tacka = new Tacka[2]; tacka[0]=T1; tacka[1]=T2;}
             void print() { cout<<"Duz sa kordinatama:"<<endl;}
};

class Trougao : public Poligon
{
      public:
             Trougao(Tacka T1, Tacka T2, Tacka T3){tacka = new Tacka[3]; tacka[0]=T1; tacka[1]=T2; tacka[2]=T3;}
             void print() {}
};

class Cetvorougao : public Poligon
{
      public:
             Cetvorougao(Tacka T1, Tacka T2, Tacka T3, Tacka T4){tacka = new Tacka[4]; tacka[0]=T1; tacka[1]=T2; tacka[2]=T3; tacka[3]=T4;}
             void print() {}
};

Ovako dobijas trazenu strukturu. Ostaje da dodas destruktore i metode koje rade nesto sa tim tackama.
 
Odgovor na temu

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?10.01.2010. u 21:33 - pre 173 meseci
Kako da redefinisem konstruktore za klase Duz,Trougao,Cetvorougao?

Stalno dobivam poruke kada kompajliram tip:

In constructor `Duz::Duz(Tacka, Tacka)':
no matching function for call to `Tacka::Tacka()'
candidates are: Tacka::Tacka(const Tacka&)
Tacka::Tacka(double,double)

In constructor `Trougao::Trougao(Tacka, Tacka, Tacka)':
no matching function for call to `Tacka::Tacka()'
candidates are: Tacka::Tacka(const Tacka&)
Tacka::Tacka(double,double)

In constructor `Cetvorougao::Cetvorougao(Tacka, Tacka, Tacka,Tacka)':
no matching function for call to `Tacka::Tacka()'
candidates are: Tacka::Tacka(const Tacka&)
Tacka::Tacka(double,double)


Evo mog koda:

Code:

#include<iostream>
#include <cmath>

using namespace std;

class Tacka 
{
      public:
             Tacka(double xx,double yy): x(xx),y(yy) {}
             void setX(double xx) {x=xx;}
             double getX() {return x;}
             void setY(double yy) {y=yy;}
             double getY() {return y;}
             friend ostream& operator<<(ostream& out,Tacka& tt)  // ispisivanje
                { return out <<"("<<tt.x<<","<< tt.y<<")" ; }
      private:
                double x;
                double y; 
};
class Poligon
{
      public:
             virtual void print()=0;
             virtual double obim() =0;
             virtual double povrsina() =0;
             virtual ~Poligon(){}
      protected:
             Tacka *tacka;
};

class Duz : public Poligon
{
      public:
             Duz(Tacka T1, Tacka T2){tacka = new Tacka[2]; tacka[0]=T1; tacka[1]=T2;}
             void print() ;           
};
void Duz::print()
{
     cout<< "Duz sa tackama: A(" << tacka[0] << " B"<< tacka[1] << endl;
}

class Trougao : public Poligon
{
      public:
             Trougao(Tacka T1, Tacka T2, Tacka T3){tacka = new Tacka[3]; tacka[0]=T1; tacka[1]=T2; tacka[2]=T3;}
             void print();
             double a();      // stranice trougla: a
             double b();      //                   b    
             double c();      //                   c
             double obim();
             double povrsina();
             ~Trougao () { delete [] tacka ;}
             
};
void Trougao ::print()
{
     cout<<"Trougao sa tackama: "<<tacka[0]<<" B"<<tacka[1]<<" C"<<tacka[2]<<endl;
}
double Trougao::a()
{
       double a=0;
       a=sqrtf(pow(tacka[0].getX()-tacka[1].getX(),2)+pow(tacka[0].getY()-tacka[1].getY(),2));
       return a;
}
double Trougao ::b()
{
       double b=0;
       b=sqrtf(pow(tacka[1].getX()-tacka[2].getX(),2)+pow(tacka[1].getY()-tacka[2].getY(),2));
       return b;
}
double Trougao ::c()
{
       double c=0;
       c=sqrtf(pow(tacka[0].getX()-tacka[2].getX(),2)+pow(tacka[0].getY()-tacka[2].getY(),2));
       return c;
}
double Trougao ::obim()
{
       double o=0;
       int n=3;
       cout<<"----------";
       for(int i=0;i<n-1;i++)
       o+=sqrtf(pow(tacka[i].getX()-tacka[i+1].getX(),2)+pow(tacka[i].getY()-tacka[i+1].getY(),2));
       o+=sqrtf(pow(tacka[0].getX()-tacka[n-1].getX(),2)+pow(tacka[0].getY()-tacka[n-1].getY(),2));
       return o; 

double Trougao ::povrsina()
{
       double p=0;
       double s=0;
       s=(Trougao::obim()/2);
       p=sqrtf(  (  s * (s-Trougao::a()) * (s-Trougao::b()) * (s-Trougao::c())  )  );
       return p;
}


class Cetvorougao : public Poligon
{
      public:
             Cetvorougao(Tacka T1, Tacka T2, Tacka T3, Tacka T4){tacka = new Tacka[4]; tacka[0]=T1; tacka[1]=T2; tacka[2]=T3; tacka[3]=T4;}
             void print();
             double obim();
             double povrsina();
             ~Cetvorougao () { delete [] tacka; }
};
void Cetvorougao :: print()
{
     cout<<"Cetvorougao sa tackama: "<<tacka[0]<<" B"<<tacka[1]<<" C"<<tacka[2]<<" D"<<tacka[3]<<endl;
}
double Cetvorougao :: obim()
{
       double o=0;
       int n=4;
       cout<<"----------";
       for(int i=0;i<3;i++)
       o+=sqrtf(pow(tacka[i].getX()-tacka[i+1].getX(),2)+pow(tacka[i].getY()-tacka[i+1].getY(),2));
       o+=sqrtf(pow(tacka[0].getX()-tacka[n-1].getX(),2)+pow(tacka[0].getY()-tacka[n-1].getY(),2));
       return o; 
}  
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
93.86.93.*



+3 Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?10.01.2010. u 21:53 - pre 173 meseci
Moras da imas i konstruktor
Tacka() {...} u klasi Tacka tj podrazumevani konstruktor ili mozes da stavis u vec navedeni konstruktor podrazumevane vrednosti tj. ovu liniju

Tacka(double xx,double yy): x(xx),y(yy) {}

da zamenis sa ovom linijom

Tacka(double xx=0,double yy=0): x(xx),y(yy) {}


 
Odgovor na temu

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?11.01.2010. u 00:25 - pre 173 meseci
Imam Problem oko ispisa kordinata tacaka svih klasa.

Code:
#include<iostream>
#include <cmath>

using namespace std;

class Tacka 
{
      public:
             Tacka(double xx=0,double yy=0): x(xx),y(yy) {}
             void setX(double xx) {x=xx;}
             double getX() {return x;}
             void setY(double yy) {y=yy;}
             double getY() {return y;}
             friend ostream& operator<<(ostream& out,Tacka& tt)  // ispisivanje
                { return out <<"("<<tt.x<<","<< tt.y<<")" ; }
      private:
                double x;
                double y; 
};
class Poligon
{
      public:
             virtual void print()=0;
             virtual double obim() =0;
             virtual double povrsina() =0;
             virtual ~Poligon(){}
      protected:
             Tacka *tacka;
};

class Duz : public Poligon
{
      public:
             Duz(Tacka T1, Tacka T2){tacka = new Tacka[2]; tacka[0]=T1; tacka[1]=T2;}
             void print() ;
             double obim(){return 0;}
             double povrsina(){return 0;}           
};
void Duz::print()
{
     cout<< "Duz sa tackama: A" << tacka[0] << " B"<< tacka[1] << endl;
}

class Trougao : public Poligon
{
      public:
             Trougao(Tacka T1, Tacka T2, Tacka T3){tacka = new Tacka[3]; tacka[0]=T1; tacka[1]=T2; tacka[2]=T3;}
             void print();
             double a();      // stranice trougla: a
             double b();      //                   b    
             double c();      //                   c
             double obim();
             double obimK(){double o=0; o=a()+b()+c(); return o; }
             double povrsina();
             ~Trougao () { delete [] tacka ;}
             
};
void Trougao ::print()
{
     cout<<"Trougao sa tackama: "<<tacka[0]<<" B"<<tacka[1]<<" C"<<tacka[2]<<endl;
     cout<<"duzine stranica su: a="<<Trougao::a()<<" ,b="<<Trougao::b()<<" ,c="<<Trougao::c()<<endl;
}
double Trougao::a()
{
       double a=0;
       a=sqrtf(pow(tacka[0].getX()-tacka[1].getX(),2)+pow(tacka[0].getY()-tacka[1].getY(),2));
       return a;
}
double Trougao ::b()
{
       double b=0;
       b=sqrtf(pow(tacka[1].getX()-tacka[2].getX(),2)+pow(tacka[1].getY()-tacka[2].getY(),2));
       return b;
}
double Trougao ::c()
{
       double c=0;
       c=sqrtf(pow(tacka[0].getX()-tacka[2].getX(),2)+pow(tacka[0].getY()-tacka[2].getY(),2));
       return c;
}
double Trougao ::obim()
{
       double o=0;
       int n=3;
       for(int i=0;i<n-1;i++)
       o+=sqrtf(pow(tacka[i].getX()-tacka[i+1].getX(),2)+pow(tacka[i].getY()-tacka[i+1].getY(),2));
       o+=sqrtf(pow(tacka[0].getX()-tacka[n-1].getX(),2)+pow(tacka[0].getY()-tacka[n-1].getY(),2));
       return o; 

double Trougao ::povrsina()
{
       double p=0;
       double s=0;
       s=(Trougao::obim()/2);
       p=sqrt(  (  s * (s-a()) * (s-b()) * (s-c())  )  );
       return p;
}


class Cetvorougao : public Poligon
{
      public:
             Cetvorougao(Tacka T1, Tacka T2, Tacka T3, Tacka T4){tacka = new Tacka[4]; tacka[0]=T1; tacka[1]=T2; tacka[2]=T3; tacka[3]=T4;}
             void print();
             double obim();
             double povrsina(){return 0;};
             ~Cetvorougao () { delete [] tacka; }
};
void Cetvorougao :: print()
{
     cout<<"Cetvorougao sa tackama: "<<tacka[0]<<" B"<<tacka[1]<<" C"<<tacka[2]<<" D"<<tacka[3]<<endl;
}
double Cetvorougao :: obim()
{
       double o=0;
       int n=4;
       for(int i=0;i<3;i++)
       o+=sqrtf(pow(tacka[i].getX()-tacka[i+1].getX(),2)+pow(tacka[i].getY()-tacka[i+1].getY(),2));
       o+=sqrtf(pow(tacka[0].getX()-tacka[n-1].getX(),2)+pow(tacka[0].getY()-tacka[n-1].getY(),2));
       return o; 
}  

main()
{
      Duz d((1.0,2.0),(4.0,2.0));
      Trougao t((1.0,1.0),(5.0,2.0),(1.0,4.0));
      Cetvorougao c((1.0,2.0),(5.0,2.0),(1.0,5.0),(5.0,5.0));
      Poligon *p[3]= { &d, &t, &c };
      
      for (int i=0; i<3; i++)
      {
          p[i]->print();
          cout<<"     obim:"<<p[i]->obim()<<endl;
          cout<<" povrsina:"<<p[i]->povrsina()<<endl<<endl;;
      }
      
      system("pause");
}
        
       


ovo je ispis:

Duz sa tackama: A(2,0) B(2,0)
obim:0
povrsina:0

Trougao sa tackama: (1,0) B(2,0) C(4,0)
duzine stranica su: a=1 ,b=2 ,c=3
obim:6
povrsina:0

Cetvorougao sa tackama: (2,0) B(2,0) C(5,0) D(5,0)
obim:6
povrsina:0


zar nebi trebalo biti npr. za Duz: A(1,2) B(4,2)?????
 
Odgovor na temu

BinaryRuler

Član broj: 73518
Poruke: 189
93.86.93.*



+3 Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?11.01.2010. u 01:14 - pre 173 meseci
Sve je ok samo nisi naveo klasu Tacka pro kreiranju objekata.
Samo dodaj Tacka ispred svake koordinate i sve radi.
Pozdrav

Code:


      Duz d(Tacka(1.0,2.0),Tacka(4.0,2.0));
      Trougao t(Tacka(1.0,1.0),Tacka(5.0,2.0),Tacka(1.0,4.0));
      Cetvorougao c(Tacka(1.0,2.0),Tacka(5.0,2.0),Tacka(1.0,5.0),Tacka(5.0,5.0));

 
Odgovor na temu

fanfare
nezaposlen
Prnjavor,BiH

Član broj: 231940
Poruke: 27
*.dialup.blic.net.



Profil

icon Re: veze izmedju klasa - AGREGACIJA. Nacin implementacije?11.01.2010. u 05:47 - pre 173 meseci
HVALA BinaryRuler! To je to.
 
Odgovor na temu

[es] :: C/C++ programiranje :: veze izmedju klasa - AGREGACIJA. Nacin implementacije?

[ Pregleda: 5018 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.