Esercizio su Class Adapter

di il
3 risposte

Esercizio su Class Adapter

Ragazzi non riesco a risolvere questo esercizio:
Si scriva un Class Adapter per la seguente classe RGBPixel per fare in modo che possa
essere usata con un client che si aspetta l’interfaccia definita nella classe IGrayPixel. Se
ne disegni il diagramma UML di classe.
Per convertire in livello di grigio una tripletta RGB si usi la formula: Per calcolare la
luminosità di un pixel, a partire dalla tripletta RGB corrispondente, si usi la formula:
grigio = 0.299 * R + 0.587 * G + 0.114 * B
class RGBPixel {
public:
RGBPixel() { _R = _G = _B = 100; };
int getR() { return _R; };
int getG() { return _G; };
int getB() { return _B; };
void setR(int R) { _R = R; };
void setG(int G) { _G = G; };
void setB(int B) { _B = B; };
private:
int _R;
int _G;
int _B;
};
class IGrayPixel {
public:
virtual unsigned char getPixel() = 0; // return gray level
};
per vederlo meglio è il numero 7 di questo pdf:
http://www.micc.unifi.it/bertini/download/labtecinf/esempio_compito_labtecinf.pdf
Per favore aiutatemi!! Tra qualche giorno ho l'esame!!

3 Risposte

  • Re: Esercizio su Class Adapter

    Per creare un Adapter tra due classi si usa l' erediterietà multipla e si crea una classe che deriva in maniera pubblica da una delle due e in maniera privata dall' altra.

    Volevo sapere se questa frase ti dice qualcosa e possiamo ragionarci sopra oppure ti è del tutto oscura. Come sai il regolamento vieta di svolgere compiti scolastici, però se ti serve solo qualche chiarimento ti aiuto ben volentieri.
  • Re: Esercizio su Class Adapter

    barba59 ha scritto:


    Per creare un Adapter tra due classi si usa l' erediterietà multipla e si crea una classe che deriva in maniera pubblica da una delle due e in maniera privata dall' altra.

    Volevo sapere se questa frase ti dice qualcosa e possiamo ragionarci sopra oppure ti è del tutto oscura. Come sai il regolamento vieta di svolgere compiti scolastici, però se ti serve solo qualche chiarimento ti aiuto ben volentieri.
    Grazie per la risposta, sto studiando da poco il c++ anche se conosco gli argomenti di cui hai parlato.
    Chiaramente non pretendo che qualcuno risolvi l'esercizio, volevo solo qualche indicazione su come procedere dato che non trovo esercizi simili a questo sull'adapter.
  • Re: Esercizio su Class Adapter

    Ciao d1gu4k3r,
    provo a farti un esempio semplice. Supponi di avere una classe Quadrato:
    
    class Square
    {
    public:
    	Square(double side)
    	{
    		this->side = side;
    	}
    
    	double Area()
    	{
    		return side * side;
    	}
    
    private:
    	double side;
    };
    
    e considera questa interfaccia:
    
    class Circle
    {
    	virtual double GetRadius() = 0;
    };
    
    Supponi che in un qualche problema ti serva di vedere questo quadrato come un cerchio (il cerchio che lo circoscrive),
    il quadrato per sua natura non ha un raggio e aggiungergli il metodo GetRadius sarebbe snaturare la classe, in questi casi si usa un adapter.
    Un adapter è una terza classe che adatta le due precedenti.
    
    class CircularSquare: public Circle, private Square
    {
    public:
    	CircularSquare(double side)
    		:Square(side)
    	{
    	}
    
    	double GetRadius()
    	{
    		return (side * M_SQRT2) / 2;
    	}
    
    };
    
    e il suo uso è il seguente:
    
    	CircularSquare cs(10);
    	double radius = cs.GetRadius();
    
    Come hai visto si è usata l' ereditarietà multipla e la derivazione pubblica e privata, se qualcuno di questi aspetti non ti fosse chiaro chiedi pure
Devi accedere o registrarti per scrivere nel forum
3 risposte