Reto03_Composición‐Herencia - Jul1anT/Retos-OOP_2025 GitHub Wiki
Ejercicio (1): Clases Geométricas
Se creo un sistema que modela elementos geométricos básicos, como puntos, líneas y rectángulos. Permitiendo generar líneas entre puntos, calcular la longitud de las líneas, la pendiente, y los cruces con los ejes horizontal y vertical. También permite crear un rectángulo utilizando dos líneas y visualizar sus coordenadas.
Desarrollo
-
Clase
Point
: Representa un punto en el plano cartesiano con dos coordenadasx
yy
.- Atributos:
x
: Coordenada horizontal (int).y
: Coordenada vertical (int).
- Métodos:
__str__(self)
: Retorna una representación en cadena del punto.
- Atributos:
-
Clase
Line
: Representa una línea recta definida por dos puntosstart
yend
.- Atributos:
start
: Un objeto de tipoPoint
que representa el inicio de la línea.end
: Un objeto de tipoPoint
que representa el final de la línea.
- Métodos:
compute_length()
: Calcula y retorna la longitud de la línea utilizando la fórmula de distancia euclidiana.compute_slope()
: Calcula y retorna la pendiente de la línea.compute_vertical_cross()
: Calcula el cruce con el eje vertical (intersección con el ejey
).compute_horizontal_cross()
: Calcula el cruce con el eje horizontal (intersección con el ejex
).
- Atributos:
-
Clase
Rectangle
: Representa un rectángulo formado por dos líneas perpendiculares.- Atributos:
line_1
: Una línea de tipoLine
.line_2
: Otra línea de tipoLine
.line_3
yline_4
: Líneas adicionales que forman el rectángulo utilizando los puntos deline_1
yline_2
.
- Métodos:
__str__(self)
: Retorna una representación en cadena de los puntos que forman el rectángulo.
- Atributos:
Ejercicio (2): Sistema de un restaurante
Se creo un sistema simple para la toma de pedidos en un restaurante. Este sistema permite crear un menú con bebidas, aperitivos y platos principales, tambíen permite calcular el total de un pedido y si en el pedido hay más de tres artículos se le aplica un descuento del 10% al monto total del pedido.
Desarrollo
-
Clase
MenuItem
: Representa un ítem del menú en el restaurante.- Atributos:
name
: Nombre del ítem (str).price
: Precio del ítem (float).size
: Tamaño del ítem (str).
- Métodos:
__init__(name: str, price: float, size: str)
: Constructor de la clase.__str__()
: Método para representar el ítem como una cadena de texto.
- Atributos:
-
Clase
Beverage
: Representa una bebida, que es un subtipo deMenuItem
.- Atributos:
size
: Tamaño de la bebida (str) (e.g., Small, Medium, Large).
- Métodos:
__init__(name: str, price: float, size: str)
: Constructor de la clase.
- Atributos:
-
Clase
Appetizer
: Representa un aperitivo, que es un subtipo deMenuItem
.- Atributos:
portion_size
: Tamaño de la porción (str) (e.g., 6 pieces, 1 plate).
- Métodos:
__init__(name: str, price: float, portion_size: str)
: Constructor de la clase.
- Atributos:
-
Clase
MainCourse
: Representa un plato principal, que es un subtipo deMenuItem
.- Atributos:
size
: Descripción del plato (str).
- Métodos:
__init__(name: str, price: float, size: str)
: Constructor de la clase.
- Atributos:
-
Clase
Order
: Representa un pedido de un cliente.- Atributos:
menu_item
: Lista de ítems del menú (MenuItem
).subtotal
: Total del pedido (float).index
: Índice de un ítem en el menú (int).amount
: Cantidad de un ítem pedido (int).desicion
: Respuesta para continuar agregando ítems al pedido (str).counter
: Contador de la cantidad de ítems seleccionados (int).
- Métodos:
__init__(menu_item: MenuItem)
: Constructor de la clase.check_order()
: Calcula el total del pedido, con un posible descuento si el pedido tiene más de 3 ítems.
- Atributos:
UML
classDiagram
class MenuItem {
+str name
+float price
+str size
+__init__(name: str, price: float, size: str)
+__str__() str
}
class Beverage {
+__init__(name: str, price: float, size: str)
}
class Appetizer {
+__init__(name: str, price: float, portion_size: str)
}
class MainCourse {
+__init__(name: str, price: float, size: str)
}
class Order {
+MenuItem menu_item
+float subtotal
+int index
+int amount
+str desicion
+int counter
+__init__(menu_item: MenuItem)
+check_order() str
}
MenuItem <|-- Beverage
MenuItem <|-- Appetizer
MenuItem <|-- MainCourse
Order *-- MenuItem : contains