Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Fecha: 11/2/2023
RESUMEN: Se consultará y se resolverán problemas propuestos en libros de POO (Programación Orientada a Objetos)
ciertos problemas están relacionados con las propiedades de la POO.
1. OBJETIVOS
Investigar libros relacionados con POO y resolver los ejercicios propuestos dentro de dichos libros.
1.1. ESPECIFICOS
Resolver ejercicios propuestos en los libros teniendo en cuenta las propiedades de POO
Comprender y analizar el funcionamiento y su resolución de cada uno de los ejercicios elegidos.
2. MARCO TEÓRICO
En lo que llamamos programación orientada a objetos, queremos dejar de centrarnos en los conceptos rigurosos de
la programación y empezar a pensar en términos de los objetos que subyacen en este proceso. Esto es muy útil en
sistemas grandes porque en lugar de pensar en la funcionalidad, se piensa en las relaciones e interacciones entre las
diferentes partes del sistema.
Los programadores organizan programas organizando datos específicos y atributos relacionados en plantillas
llamadas clases. A continuación, se crean objetos individuales a partir de la plantilla de clase. Todos los programas son
implementados por diferentes componentes que interactúan para formar un programa más grande.
La Programación Orientada a objetos permite que el código sea reutilizable, organizado y fácil de mantener. Sigue el
principio de desarrollo de software utilizado por muchos programadores DRY (Don’t Repeat Yourself), para evitar
duplicar el código y crear de esta manera programas eficientes. Además, evita el acceso no deseado a los datos o la
exposición de código propietario mediante la encapsulación y la abstracción, de la que hablaremos en detalle más
adelante.
3. MATERIALES Y EQUIPO
IDE python
4. DESARROLLO Y PROCEDIMIENTO
Libro 1:
1
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
Libro 2:
Aprende Python
Autor: Sergio Delgado Quintero
Libro 3:
How to Think Like a Computer Scientist: Learning with Python 3 Documentation Release 3rd Edition
Autor: Peter Wentworth, Jeffrey Elkner,
Allen B. Downey and Chris Meyers
Código Fuente
Código Fuente 1:
import math
class Fraccion():
def __init__(self, numerador, denominador):
if not isinstance(numerador, int):
raise TypeError('numerador', numerador, 'must be an integer')
if not isinstance(denominador, int):
raise TypeError('denominador', denominador, 'must be an integer')
self.numerador = numerador
self.denominador = denominador
# Use the math package to find the greatest common divisor
minimoComunDivisor = math.gcd(self.numerador, self.denominador)
if minimoComunDivisor > 1:
self.numerador = self.numerador // minimoComunDivisor
self.denominador = self.denominador // minimoComunDivisor
self.value = self.numerador / self.denominador
def getValue(self):
return self.value
def __str__(self):
output = ' Fraccion: ' + str(self.numerador) + '/' + \
str(self.denominador) + '\n' +\
' Value: ' + str(self.value) + '\n'
return output
2
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
3
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
print('Fraccion4\n', Fraccion4)
print('son fracciones 3 y 4 iguales?', (Fraccion3 == Fraccion4))
print()
Ejecución
2. La clase Empleado tiene los métodos __init__(), getName(), getTitle() y payPerYear(). También tiene tres
variables de instancia, self.name, self.title y self.ratePerHour, que se establecen en el método __init__().
Recuperamos el nombre y el título usando métodos getter.
A estos empleados se les paga por hora, por lo que self.payPerYear() hace un cálculo para determinar el pago
anual basado en la tarifa por hora.
Todo en esta clase debería serle familiar; no hay nada nuevo aquí. Puede crear una instancia de un objeto
Empleado por sí mismo, y funcionará bien.
Para la clase Gerente, consideramos las diferencias entre un gerente y un empleado: el gerente es un
empleado asalariado que tiene un número de reportes directos. Si este gerente hace un buen trabajo, obtiene
un bono del 10 por ciento. para el año. La clase Gerente puede extender la clase Empleado, ya que el gerente
es un empleado pero tiene capacidades y responsabilidades adicionales. El listado 10-2 muestra el código de
nuestra clase Manager. solo necesita contiene código que es diferente de la clase Empleado, por lo que verá
que no tiene un método getName() o getTitle(). Cualquier llamada a esos
4
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
Los métodos con un objeto Manager serán manejados por los métodos en la Clase de empleado.
Código Fuente
Código Fuente 2:
class Empleado():
def __init__(self, nombre, titulo, tiempoPorHora=None):
self.nombre = nombre
self.titulo = titulo
if tiempoPorHora is not None:
tiempoPorHora = float(tiempoPorHora)
self.tiempoPorHora = tiempoPorHora
def obtenerNombre(self):
return self.nombre
def obtenerTitulo(self):
return self.titulo
def pagoPorAño(self):
# 52 semanas * 5 dias por semana * 8 horas por dia
pago = 52 * 5 * 8 * self.tiempoPorHora
return pago
def getReports(self):
return self.Listareportes
5
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
self.Listareportes.remove(EmpleadoARemover)
# Create objects
Empleado1 = Empleado(input('Ingrese el nombre del empleado 1:'), input('ingrese el
cargo que ocupa: '), int(input('ingrese el tiempo en horas: ')))
Empleado2 = Empleado(input('Ingrese el nombre del empleado 2:'), input('ingrese el
cargo que ocupa: '), int(input('ingrese el tiempo en horas: ')))
Gerente = Gerente(input('ingrese el nombre del gerente: '), input('ingrese el nobre
del negocio: '), int(input('ingrese sueldo del gerente:')), [Empleado1, Empleado2])
Ejecución
6
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
3. Página: 45
Incluso con solo dos cuentas, puede ver que este enfoque se sale de mano rápidamente. Primero,
establecemos tres variables globales para cada cuenta en 1, 2, y 3. Además, cada función ahora tiene una
declaración if para elegir qué conjunto de variables globales para acceder o cambiar. Cada vez que queramos
agregar otro cuenta, tendremos que agregar otro conjunto de variables globales y más si declaraciones en cada
función. Esto simplemente no es un enfoque factible. Nosotros necesita una forma diferente de manejar un
número arbitrario de cuentas.
Código Fuente
Código Fuente 3:
NombrecuentaList = []
BalancecuentaList = []
ContraseñacuentaList = []
7
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
def retiro(Numerocuenta, amountToWithdraw, contraseña):
global NombrecuentaList, BalancecuentaList, ContraseñacuentaList
if amountToWithdraw < 0:
print('You cannot retiro a negative amount')
return None
if contraseña != ContraseñacuentaList[Numerocuenta]:
print('incorecta la contraseña para esta cuenta')
return None
BalancecuentaList[Numerocuenta] = BalancecuentaList[Numerocuenta] -
amountToWithdraw
return BalancecuentaList[Numerocuenta]
while True:
print()
print('presione b para obtener el balance')
print('presione d para depositar')
print('presione n para crear nueva cuenta')
print('presione w para hacer un retiro')
print('presione s para ver todas las cuentas')
print('presione q salir')
print()
8
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
NumeroCuentausuario = len(NombrecuentaList)
nuevaCuenta(usuarioNombre, MontoInicialusuario, Contraseñausuario)
print('Su nuevo numero de cuenta es:', NumeroCuentausuario)
9
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
print('Done')
Ejecución
10
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
4. Mediante el uso de clases genere un programa que el cual, mediante el uso de dos puntos y la implementación
de clases, calcule el área de tres figuras las cuales son cuadrado, circulo y rectángulo y luego las exprese con
el uso de números decimales.
Código Fuente
Código Fuente 4:
class Shape(object):
def __init__(self, x, y):
self.x = x
self.y = y
def area(self):
raise Noimplementado
def circunferencia(self):
raise Noimplementado
def __str__(self):
return f'{type(self).__name__} ({self.x}, {self.y})'
class circulo(Shape):
def __init__(self, r, *args, **kwargs):
self.r = r
super().__init__(*args, **kwargs)
def area(self):
return pi * self.r ** 2
def circunferencia(self):
return 2 * pi * self.r
class Rectangulo(Shape):
def __init__(self, longitud, ancho, *args, **kwargs):
self.l = longitud
self.w = ancho
super().__init__(*args, **kwargs)
def area(self):
return self.l * self.w
def circunferencia(self):
return 2 * self.l + 2 * self.w
11
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
class Cuadrado(Rectangulo):
def __init__(self, longitud, *args, **kwargs):
super().__init__(longitud, longitud, *args, **kwargs)
if __name__ == '__main__':
shapes = [Cuadrado(10, x=0, y=0), circulo(20, -1, 1), Rectangulo(3.4, 1.5, 20,
y=5)]
Ejecución
5. Genere un código que permita visualizar el estado y diferentes parámetro de un televisor, a su vez que me
permita imprimir diferentes estados en los que se encuentran los televisores no se olvide de implementar las
diferentes propiedades de la programación.
Código Fuente
Código Fuente 5: Solución para E/S
class TV():
def __init__(self, marca, ubicacion):
self.marca = marca
self.ubicacion = ubicacion
self.isOn = False
self.esSilenciado = False
self.Listadecanales = [2, 4, 5, 7, 9, 11, 20, 36, 44, 54, 65]
self.nCanales = len(self.Listadecanales)
self.Indicedecanales = 0
self.VOLUMEN_MINIMO = 0
self.VOLUMEN_MAXIMO = 10
self.volumen = self.VOLUMEN_MAXIMO // 2
def power(self):
self.isOn = not self.isOn
def volumenUp(self):
12
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
if not self.isOn:
return
if self.esSilenciado:
self.esSilenciado = False
if self.volumen < self.VOLUMEN_MAXIMO:
self.volumen = self.volumen + 1
def volumenDown(self):
if not self.isOn:
return
if self.esSilenciado:
self.esSilenciado = False # changing the volumen while muted, unmutes
the sound
if self.volumen > self.VOLUMEN_MINIMO:
self.volumen = self.volumen - 1
def channelUp(self):
if not self.isOn:
return
self.Indicedecanales = self.Indicedecanales + 1
if self.Indicedecanales == self.nCanales:
self.Indicedecanales = 0
def channelDown(self):
if not self.isOn:
return
self.Indicedecanales = self.Indicedecanales - 1
if self.Indicedecanales < 0:
self.Indicedecanales = self.nCanales - 1
def mute(self):
if not self.isOn:
return
self.esSilenciado = not self.esSilenciado
def showInfo(self):
print()
print('Estatus de la TV:', self.marca)
print(' Ubicacion:', self.ubicacion)
if self.isOn:
print(' La tv esta: On')
13
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
Ejecución
14
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
6. Crea un objeto ‘ventana’ de la clase Tk de tkinter. Se coloca un mensaje en una etiqueta y se crea un botón
para salir de la ventana.
Código Fuente
Código Fuente 6:
Ejecución
7. Realizar una clase que administre una agenda. Se debe almacenar para cada contacto el nombre, el teléfono y
el email. Además, deberá mostrar un menú con las siguientes opciones
Añadir contacto
Lista de contactos
Buscar contacto
Editar contacto
Cerrar agenda
Código Fuente
15
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
Código Fuente 7:
class Agenda:
def __init__(self):
self.contactos=[]
def menu(self):
print()
menu=[
['Agenda Personal'],
['1. Añadir Contacto',"anadir"],
['2. Lista de contactos'],
['3. Buscar contacto'],
['4. Editar contacto'],
['5. Cerrar agenda']
]
for x in range(6):
print(menu[x][0])
opcion=int(input("Introduzca la opción deseada: "))
if opcion==1:
self.anadir()
elif opcion==2:
self.lista()
elif opcion==3:
self.buscar()
elif opcion==4:
self.editar()
elif opcion==5:
print("Saliendo de la agenda ...")
exit()
self.menu()
def anadir(self):
print("---------------------")
print("Añadir nuevo contacto")
print("---------------------")
nom=input("Introduzca el nombre: ")
telf=int(input("Introduzca el teléfono: "))
email=input("Introduzca el email: ")
self.contactos.append({'nombre':nom,'telf':telf,'email':email})
def lista(self):
print("------------------")
16
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
print("Lista de contactos")
print("------------------")
if len(self.contactos) == 0:
print("No hay ningún contacto en la agenda")
else:
for x in range(len(self.contactos)):
print(self.contactos[x]['nombre'])
# función para buscar un contacto a través del nombre
def buscar(self):
print("---------------------")
print("Buscador de contactos")
print("---------------------")
nom=input("Introduzca el nombre del contacto: ")
for x in range(len(self.contactos)):
if nom == self.contactos[x]['nombre']:
print("Datos del contacto")
print("Nombre: ",self.contactos[x]['nombre'])
print("Teléfono: ",self.contactos[x]['telf'])
print("E-mail: ",self.contactos[x]['email'])
return x
# función para editar los datos de un contacto
def editar(self):
print("---------------")
print("Editar contacto")
print("---------------")
data=self.buscar()
condition=False
while condition==False:
print("Selecciona que quieres editar: ")
print("1. Nombre")
print("2. Teléfono")
print("3. E-mail")
print("4. Volver")
option=int(input("Introduzca la opción deseada: "))
if option==1:
nom=input("Introduzca el nuevo nombre: ")
self.contactos[data]['nombre']=nom
elif option==2:
telf=input("Introduzca el nuevo teléfono: ")
self.contactos[data]['telf']=telf
elif option==3:
17
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
Ejecución
18
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
8. En un banco tienen clientes que pueden hacer depósitos y extracciones de dinero. El banco requiere también al
final del día calcular la cantidad de dinero que se ha depositado.
Se deberán crear dos clases, la clase cliente y la clase banco. La clase cliente tendrá los atributos nombre y
cantidad y los métodos __init__, depositar, extraer, mostrar_total. La clase banco tendrá como atributos 3
objetos de la clase cliente y los métodos __init__, operar y deposito_total.
19
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
Código Fuente
Código Fuente 8:
class Banco:
def __init__(self):
self.cliente1=Cliente("Jose")
self.cliente2=Cliente("Maria")
self.cliente3=Cliente("Luis")
def operacion(self):
self.cliente1.depositar(1000)
self.cliente2.depositar(300)
self.cliente3.depositar(43)
self.cliente1.extraer(400)
def depositos(self):
total=self.cliente1.devolver_cantidad()+self.cliente2.devolver_cantidad()
+self.cliente3.devolver_cantidad()
print("El total de dinero del banco es: ",total)
self.cliente1.imprimir()
self.cliente2.imprimir()
self.cliente3.imprimir()
class Cliente:
def __init__(self,nombre):
self.nombre=nombre
self.cantidad=0
def depositar(self,cantidad):
self.cantidad+=cantidad
def extraer(self,cantidad):
self.cantidad-=cantidad
def devolver_cantidad(self):
return self.cantidad
def imprimir(self):
print(self.nombre, " tiene depositada una cantidad de ",self.cantidad)
banco1=Banco()
banco1.operacion()
banco1.depositos()
Ejecución
20
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
9. Desarrollar un programa que conste de una clase padre Cuenta y dos subclases PlazoFijo y
CajaAhorro. Definir los atributos titular y cantidad y un método para imprimir los datos en la clase Cuenta. La
clase CajaAhorro tendrá un método para heredar los datos y uno para mostrar la información. La clase
PlazoFijo tendrá dos atributos propios, plazo e interés. Tendrá un método para obtener el importe del interés
(cantidad*interés/100) y otro método para mostrar la información, datos del titular plazo, interés y total de
interés. Crear al menos un objeto de cada subclase.
Código Fuente
Código Fuente 9:
class Cuenta:
def __init__(self,titular,cantidad):
self.titular=titular
self.cantidad=cantidad
def imprimir(self):
print("Titular: ",self.titular)
print("Cantidad: ", self.cantidad)
class CajaAhorro(Cuenta):
# iniciamos los atributos de la clase
def __init__(self,titular,cantidad):
super().__init__(titular,cantidad)
def imprimir(self):
print("Cuenta de caja de ahorros")
super().imprimir()
class PlazoFijo(Cuenta):
def __init__(self,titular,cantidad,plazo,interes):
super().__init__(titular,cantidad)
self.plazo=plazo
self.interes=interes
def ganancia(self):
21
UNIVERSIDAD POLITÉCNICA SALESIANA PROGRAMACION ORIENTADA A OBJETOS
Fecha: 11/2/2023
ganancia=self.cantidad*self.interes/100
print("El importe de interés es: ",ganancia)
def imprimir(self):
print("Cuenta a plazo fijo")
super().imprimir()
print("Plazo disponible en días: ",self.plazo)
print("Interés: ",self.interes)
self.ganancia()
caja1=CajaAhorro("Jose",5000)
caja1.imprimir()
plazo1=PlazoFijo("Ismael",8000,365,1.2)
plazo1.imprimir()
Ejecución
5. REFERENCIAS
Kalb, I. (2022). Object-Oriented Python: Master OOP by Building Games and GUIs. No Starch Press.
Delgado, s. (2023). Aprende Python - Fundamentos y Conceptos Básicos. Digital Services LLC - Kdp.
How to Think Like a Computer Scientist: Learning with Python 3 Documentation (1.a ed., Vol. 1). (2017). Peter
Wentworth.
22