Salta el contingut
 

Exercici: Proves d'objectes

Joan Puigcerver Ibáñez

Llicència: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 🅭

Proves d'objectes

ud4.objects

L'objectiu d'aquests exercicis és implementar i provar diferents classes i els seus mètodes.

Exercicis de Programació

A més dels exercicis següents, pots fer les proves de totes les classes de programació orientada a objectes que has implementat en el mòdul professional de Programació.

Robot

Implementa i prova la classe Robot, que representa un robot que es pot moure en un pla bidimensional (2D).

classDiagram
    class Robot {
        - «get» x: double
        - «get» y: double
        - «get» speed: double
        + Robot()
        + Robot(x: double, y: double)
        + Robot(x: double, y: double, speed: double)
        + accelerate(): void
        + decelerate(): void
        + up(): void
        + down(): void
        + left(): void
        + right(): void
        + toString(): String
    }

Atributs

  • double x, y: coordenades del robot.
  • double speed: velocitat del robot.

Constructors

  • Robot(): constructor per defecte. Crea un robot en l'origen (0, 0) amb velocitat 1.
  • Robot(x: double, y: double): crea un robot en les coordenades especificades amb velocitat 1.
  • Robot(x: double, y: double, speed: double): crea un robot en les coordenades i amb la velocitat especificades. La velocitat ha d'estar entre 0 i 10:
    • Si s'especifica un valor inferior a 0, la velocitat serà 0.
    • Si s'especifica un valor superior a 10, la velocitat serà 10.

Mètodes

  • void accelerate(): incrementa la velocitat del robot en 0,5. La velocitat màxima és 10.
  • void decelerate(): redueix la velocitat del robot en 0,5. La velocitat mínima és 0.
  • void up(): mou el robot cap amunt segons la seua velocitat.
  • void down(): mou el robot cap avall segons la seua velocitat.
  • void left(): mou el robot cap a l'esquerra segons la seua velocitat.
  • void right(): mou el robot cap a la dreta segons la seua velocitat.
  • String toString(): retorna una representació en text del robot amb les seues coordenades i velocitat.

    Robot(x=0.0, y=0.0, speed=1.0)
    

Figures geomètriques

ud4.objects.shapes

Implementa i prova les classes Circle i Rectangle, que representen les figures geomètriques corresponents situades en un pla bidimensional.

classDiagram
    class Circle {
        - «get/set» x: double
        - «get/set» y: double
        - «get/set» radius: double
        + Circle()
        + Circle(radius: double)
        + Circle(x: double, y: double)
        + Circle(x: double, y: double, radius: double)
        + getArea(): double
        + getPerimeter(): double
        + setPosition(x: double, y: double): void
        + move(dx: double, dy: double): void
        + contains(x: double, y: double): boolean
    }
    class Rectangle {
        - «get/set» x: double
        - «get/set» y: double
        - «get/set» width: double
        - «get/set» height: double
        + Rectangle()
        + Rectangle(width: double, height: double)
        + Rectangle(x: double, y: double, width: double, height: double)
        + getArea(): double
        + getPerimeter(): double
        + setPosition(x: double, y: double): void
        + move(dx: double, dy: double): void
        + contains(x: double, y: double): boolean
    }

Si ja coneixes l'herència, pots implementar les classes Circle i Rectangle com a subclasses de la classe abstracta Shape i extraure'n els atributs i mètodes comuns.

classDiagram
    Shape <|-- Rectangle
    Shape <|-- Circle
    class Shape {
        <<abstract>>
        # «get/set» x: double
        # «get/set» y: double
        # Shape(x: double, y: double)
        + «abstract» getArea(): double
        + «abstract» getPerimeter(): double
        + setPosition(x: double, y: double): void
        + move(dx: double, dy: double): void
        + «abstract» contains(x: double, y: double): boolean
    }
    class Circle {
        # «get/set» radius: double
        + Circle()
        + Circle(radius: double)
        + Circle(x: double, y: double)
        + Circle(x: double, y: double, radius: double)
        + getArea(): double
        + getPerimeter(): double
        + contains(x: double, y: double): boolean
    }
    class Rectangle {
        # «get/set» width: double
        # «get/set» height: double
        + Rectangle()
        + Rectangle(width: double, height: double)
        + Rectangle(x: double, y: double, width: double, height: double)
        + getArea(): double
        + getPerimeter(): double
        + contains(x: double, y: double): boolean
    }

Les classes tenen els atributs, constructors i mètodes següents:

Atributs

  • double x, y: coordenades del centre del cercle.
  • double radius: radi del cercle.

Constructors

  • Circle(): constructor per defecte. Crea un cercle amb centre en l'origen (0, 0) i radi 1.
  • Circle(radius: double): crea un cercle amb centre en l'origen (0, 0) i el radi especificat.
  • Circle(x: double, y: double): crea un cercle amb el centre especificat i radi 1.
  • Circle(x: double, y: double, radius: double): crea un cercle amb el centre i el radi especificats.

Mètodes

  • double getArea(): retorna l'àrea del cercle.
  • double getPerimeter(): retorna el perímetre del cercle.
  • void setPosition(double x, double y): mou el cercle a la posició especificada.
  • void move(double dx, double dy): mou el cercle la distància especificada respecte a la posició actual.
  • boolean contains(double x, double y): retorna true si el punt especificat és dins del cercle, o false en cas contrari.

Atributs

  • double x, y: coordenades del vèrtex inferior esquerre.
  • double width, height: amplària i altura del rectangle.

Constructors

  • Rectangle(): constructor per defecte. Crea un rectangle amb el vèrtex inferior esquerre en l'origen (0, 0) i dimensions 1x1.
  • Rectangle(width: double, height: double): crea un rectangle amb el vèrtex inferior esquerre en l'origen (0, 0) i les dimensions especificades.
  • Rectangle(x: double, y: double, width: double, height: double): crea un rectangle amb la posició i les dimensions especificades.

Mètodes

  • double getArea(): retorna l'àrea del rectangle.
  • double getPerimeter(): retorna el perímetre del rectangle.
  • void setPosition(double x, double y): mou el rectangle a la posició especificada.
  • void move(double dx, double dy): mou el rectangle la distància especificada respecte a la posició actual.
  • boolean contains(double x, double y): retorna true si el punt especificat és dins del rectangle, o false en cas contrari.

Product i ShoppingCart

ud4.objects.shoppingcart

Implementa i prova les classes Product, ShoppingCartItem i ShoppingCart, que representen l'estructura d'una cistella de la compra.

La classe ShoppingCart té, entre d'altres, els mètodes següents:

  • void addProduct(Product product, int quantity): afig la quantitat indicada del producte a la cistella de la compra. Si el producte ja hi és, n'incrementa la quantitat. Si no, l'afig com a producte nou.
  • void removeProduct(Product product, int quantity): lleva la quantitat indicada del producte de la cistella de la compra. Si la quantitat final és 0, elimina el producte de la cistella.
classDiagram
    class Product {
        - «get» name: String
        - «get» price: double
        + Product(name: String, price: double)
    }
    class ShoppingCartItem {
        - product: Product
        - «get/set» quantity: int
        + ShoppingCartItem(product: Product, quantity: int)
    }
    class ShoppingCart {
        - products: List~ShoppingCartItem~
        + ShoppingCart()
        + addProduct(product: Product, quantity: int): void
        + removeProduct(product: Product, quantity: int): void
        + getTotalPrice(): double
    }
    ShoppingCart "1" *-- "0..*" ShoppingCartItem : contains
    ShoppingCartItem "0..*" -- "1" Product : has
📌 Aquest document pot quedar desactualitzat després d’imprimir-lo. Pots consultar la versió més recent a la pàgina web.
🌿 Abans d’imprimir aquest document, considera si és realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.