Características das Linguagens de Programação – 2014/02 – P1 – 09/12/2014 1a questão: Considere um ponto P em R2, determinado por um par de coordenadas (x, y). Forneça em Java o código da classe Point que implementa uma abstração correspondente a um dado ponto em R2. Você deverá fornecer explicitamente o código do construtor P(double x, double y) para a classe Point, além do código para os métodos, cujas definições são: public double getXCoordinate (); /* retorna a coordenada x do ponto */ public double getYCoordinate (); /* retorna a coordenada y do ponto */ public setXYCoordinates (double x, double y); /* atribui um novo valor às coordenada x e y do ponto */ public moveTo (double x, double y); /* move o ponto para as novas coordenadas x e y */ public printAtts (); /* imprime as coordenadas do ponto */ Observe, ao máximo, o espírito do encapsulamento. 2a questão: Considere um círculo C em R2, determinado pelo par de coordenadas (x,y) referente ao seu centro e o seu raio R. Forneça o código da classe Circle, que herda da classe Point e implementa a abstração correspondente a um círculo em R2. Você deverá prover o código de dois construtores para Circle. O primeiro, Circle(Point p, double radius) e, o segundo, Circle(double x, double y, double radius), este último construído a partir do construtor de Point. Faça o override dos métodos herdados de Point, quando necessário. Adicionalmente você deverá fornecer o código para os seguintes métodos: public double getPerimeter (); /* retorna o perímetro do círculo */ public double getArea (); /* retorna a área do círculo */ public setRadius (double r); /* atribui um novo valor ao raio do círculo */ public double getRadius (); /* retorna o raio do círculo */ public Point getCenter(); /* retorna o objeto Point correspondente ao centro do círculo */ 3a questão: Considere agora uma esfera em R3, determinada pela tupla (x, y, z) referente ao seu centro e o seu raio R. Forneça o código da classe Sphere que implementa essa abstração. Sphere herda de Circle. Para a classe Sphere forneça o construtor, construído a partir do construtor de Circle e acrescentando a coordenada z, correspondendo ao centro da esfera. Faça o override dos métodos herdados de Point e de Circle, quando necessário. Adicionalmente você deverá fornecer o código para os seguintes métodos: public double getVolume(); /* retorna o volume da esfera */ public double getZcoordinate (); /* retorna a coordenada z do centro da esfera */ public setXYZCoordinates (double x, double y, double z); /* atribui um novo valor à coordenada z do centro da esfera */ 4a questão: A partir do código gerado nas questões anteriores forneça um pequeno programa que exemplifique o conceito de polimorfismo. 5a questão: Considere que ume esfera e1 é maior que uma outra esfera e2, se o volume da esfera e1 é maior que o volume da esfera e2. Implemente, na classe Sphere, a interface Relatable, que estabelece como comparar o “tamanho” entre dois objetos. public interface Relatable { // this (object calling isLargerThan) and // other must be instances of the same class // returns 1, 0, -1 if this is greater // than, equal to, or less than other public int isLargerThan(Relatable other); } 6a questão: Considere a seguinte implementação alternativa para a classe Sphere: public class Sphere{ Point3D center; // ponto em 3 dimensões, caracterizado pelas coordenadas x,y,z. int radius; // implementação do construtor de Sphere ... // implementação dos outros métodos de Sphere … } Como você faria em Java para criar um clone de um objeto que seja instância da classe Sphere? Forneça o código correspondente . Boa Sorte!