Fundamentos POO Python
Fundamentos POO Python
Desarrollo Web y
Aplicaciones Digitales
Programación II
Módulo
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
ÍNDICE
ÍNDICE 1
Programación Orientada a Objetos 2
Objetos 4
Clases 7
Representación gráfica de clases 8
Relación entre clases y objetos 9
Clases e instancias en Python 10
Clases 10
Instancias 16
Recomendaciones 17
Fundamentos del enfoque orientado a objetos (EOO) 18
Jerarquías 19
Herencia 19
Agregación y Composición 26
Abstracción 27
Encapsulamiento 29
Modularidad 31
Polimorfismo 33
Tipificación 34
Concurrencia 34
Persistencia 35
Clases estáticas 35
Interfaces 36
Referencias 37
1
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
natural posible.
hemos usado hasta aquí, el programador busca identificar los procesos (en forma
que los programadores orientados a objetos siguen usando dentro de este nuevo
visibilizar y hasta realizar las más pequeñas modificaciones del código fuente lo
2
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
dominio del problema. En este punto es importante agregar que, esos objetos no
capaces de ejecutar.
Un buen ejemplo son los videojuegos. Por ejemplo, el juego Mario Bros,
estos personajes son capaces de saltar y caminar e interactuar con otros objetos
3
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Ventajas de la POO
representar/modelar.
de gran complejidad.
confiabilidad.
Objetos
Para comprenderlo veamos la siguiente imagen y luego intentemos
responder ¿Cuáles son los objetos que se pueden abstraer para ver televisión?
4
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
ELEMENTO DESCRIPCIÓN
Persona Tiene sus propios atributos: Apellido, Nombre, Altura, género, Color
ojos, Cabello, etc.
Y tiene un comportamiento: Ver , escuchar, hablar, correr, saltar, etc.
Control Tiene sus propios atributos: Tamaño, color, tipo, batería, etc.
Remoto Y tiene un comportamiento: Enviar señal, codificar señal, cambiar
canal, aumentar volumen, ingresar a menú, prender TV, etc.
Televisor Tiene sus propios atributos: pulgadas, tipo, número parlantes, marca ,
etc.
Y tiene un comportamiento: decodificar señal, prender, apagar, emitir
señal, emitir audio, etc.
comportamiento (métodos) que realiza por sí solo o bien, interactuando con otros
objetos.
5
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Figura 4: Televisor
identifica por un nombre o identificador único que lo diferencia de los demás (en
este caso puede ser el nro de serie), un estado (encendido, apagado), un tipo
demás.
● Poseen estados.
6
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Clases
Una clase es la descripción de una entidad u objeto de forma tal que pueda
usarse como plantilla para crear muchos objetos que respondan a dicha
programación tradicional. Así como el tipo es uno solo y describe la forma que
tienen todas las muchas variables de ese tipo, la clase es única y describe la
7
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Fuente:[Link]
na-clase/
8
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
privado).
operaciones. Es decir que, las clases son una especie de molde de fábrica, en
Por su parte, los objetos son instancias individuales de una clase. Durante
9
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
con un valor, deberemos iniciar los objetos sólo que, para los objetos lo
Clases
los símbolos del vocabulario pueden combinarse para escribir código fuente
correcto mientras que la semántica, guarda una estrecha relación con lo que es
Así, por ejemplo, en el lenguaje natural son las reglas de la sintaxis las que
correcta y, las reglas semánticas nos posibilitan detectar que la siguiente frase “el
10
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
class <NombreDeLaClase>:
<nombreDeAtributoDeClase> = <valor>
self.<atributo1> = <parametro1>
self.<atributo2> = <parametro2>
def <nombre_de_metodo>(self):
11
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
clase. Los atributos, de alguna manera, muestran lo que cada objeto es, o
nombre del atributo de la clase, y <valor> es el valor inicial del atributo de la clase.
objeto.nombre_de_atributo_de_la_clase
método __init__ de la clase y se inicializan con los valores de los parámetros que
([Link] ).
objetos descritos por esa clase. Los métodos, de alguna manera, muestran
La sintaxis es:
class <NombreDeLaClase>:
12
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
que trabajen de manera aislada, la idea es que ellas se puedan relacionar entre
sí, de manera que puedan compartir atributos y métodos sin necesidad de volver
a escribirlos.
parámetros.
Sintaxis:
class <NombreDeLaClase>:
13
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Python son métodos especiales que se utilizan para acceder y modificar los
Ejemplo:
class Persona:
self.__nombre = nombre
self.__edad = edad
def get_nombre(self):
return self.__nombre
self.__nombre = nombre
def get_edad(self):
return self.__edad
self.__edad = edad
14
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
def imprimir_datos(self):
print(f"Nombre: {self.get_nombre()}")
print(f"Edad: {self.get_edad()}")
p = Persona("Juan", 30)
p.set_nombre("Pedro")
p.set_edad(35)
métodos get_nombre y get_edad son los getters, que se utilizan para acceder a
los atributos privados, mientras que los métodos set_nombre y set_edad son los
Por otro lado, es posible definir las propiedades getter y setter de una
muestra en el ejemplo:
class MyClass:
def __init__(self):
self._x = None
@property
15
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
def x(self):
return self._x
@[Link]
self._x = value
miembros de una clase en Python son públicos por defecto. Sin embargo,
método de una clase no debería ser accedido desde fuera de la clase (ej.
__atributoPrivado).
Instancias
En Python, una instancia de clase es un objeto que se crea a partir de una clase. Para crear
el objeto, utilizamos la sintaxis nombre_de_clase().
Ejemplo:
objeto = MiClase(1, 2)
16
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
objeto.
Ejemplo:
Ejemplo:
persona= Persona("Maria","Rosas");
3. Por medio de la propiedad setter:
Ejemplo:
persona= Persona();
[Link]="Rosas";
[Link] ="Maria";
Recomendaciones
una buena práctica es seguir el estilo utilizado por los diseñadores del lenguaje
pues, de seguir esta práctica será mucho más fácil analizar el fuente de terceros
● Abstracción
● Encapsulamiento
● Modularidad
18
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
● Polimorfismo
● Tipificación
● Concurrencia
● Persistencia.
Jerarquías
código existente se puede escalar y reutilizar sin tener que volver a escribirlo cada
vez.
Herencia
el cual se puede crear una clase hija que hereda de una clase padre,
compartiendo sus métodos y atributos. Además de ello, una clase hija puede
sobreescribir los métodos o atributos, o incluso definir unos nuevos. Para crear
una clase hija se debe pasar como parámetro la clase de la que se quiere
heredar.
19
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Por ejemplo en python, se puede definir una clase padre llamada Auto y
crear una clase hija llamada Convertible que hereda de Auto de la siguiente
manera:
nueva clase B en términos de otra clase A ya definida, pero de forma que la clase
B obtiene todos los miembros definidos en la clase A sin necesidad de hacer una
desde la clase A, hace que la clase B incluya todos los miembros de A como
herencia entre ellas, y se modela en UML con una flecha continua terminada en
punta cerrada. La flecha parte de la nueva clase (o clase derivada) que sería B en
nuestro caso):
20
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
La clase desde la cual se hereda, se llama super clase, y las clases que
en general como clase base de la jerarquía. La idea es que la clase base reúne
en ella características que son comunes a todas las clases de la jerarquía, y que
jerarquía de clases:
21
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
En esta jerarquía, la clase base es “Clase A”. Las clases “Clase B” y “Clase
C” son derivadas directas de “Clase A”. Note que “Clase D” deriva en forma
directa desde “Clase B”, pero en forma indirecta también deriva desde “Clase A”,
clase puede tener una y sólo una superclase directa. El gráfico anterior es un
ejemplo de una jerarquía de clases que siguen herencia simple. La Clase D tiene
una sola superclase directa que es Clase B. No hay problema en que a su vez
22
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
esta última derive a su vez desde otra clase, como Clase A en este caso. El
hecho es que en herencia simple, a nivel de gráfico UML, sólo puede existir una
clase puede tener tantas superclases directas como se desee. En la gráfica UML,
puede haber varias flechas partiendo desde la clase derivada hacia sus
múltiple: note que Clase D deriva en forma directa desde las clases Clase B y
también que la relación que existe entre las Clase B y Clase C contra Clase A es
de herencia simple; tanto Clase B como Clase C tienen una y sólo una superclase
directa: Clase A.
23
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
general se acepta que la herencia múltiple lleva a diseños más complejos que los
Necesitamos crear dos clases que llamaremos Suma y Resta que derivan
Suma y Resta.
class Operacion:
24
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
self.__valorB = valorB
@property
def valorA(self):
return self.__valorA
@[Link]
def valorA(self, valor):
self.__valorA = valor
@property
def valorB(self):
return self.__valorB
@[Link]
def valorB(self, valor):
self.__valorB = valor
class Suma(Operacion):
def sumar(self):
return [Link] + [Link]
class Resta(Operacion):
def restar(self):
return [Link] - [Link]
25
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Agregación y Composición
partes del auto que son elementales para su existencia y funcionamiento, como
agregación.
Ejemplo en Python:
class Motor:
def __init__(self, cilindrada, potencia):
[Link] = cilindrada
[Link] = potencia
def encender(self):
print("El motor se ha encendido.")
def apagar(self):
26
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
class Auto:
def __init__(self, marca, modelo, motor):
[Link] = marca
[Link] = modelo
[Link] = motor
def arrancar(self):
print("El auto ha arrancado.")
[Link]()
def parar(self):
print("El auto se ha detenido.")
[Link]()
class Radio:
def __init__(self, marca, modelo):
[Link] = marca
[Link] = modelo
siendo una parte elemental del auto (composición) pero no siendo así, con la
radio (agregación). Es decir que, podríamos crear una instancia de Auto sin
Abstracción
27
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
a otros objetos, así como las operaciones que puede realizar sobre otros objetos”
([Link]
[Link] )
28
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
agregación es la descomposición.
([Link]
ologia%20en%20Informatica%20y%20sistemas/Compilados/Compilado%20Progr
amacion%[Link] )
en las abstracciones.
Encapsulamiento
sintaxis específica para definir miembros privados. Sin embargo, se puede simular
29
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
como indicando que son "especiales". Esto hace que los miembros sean más
difíciles de acceder desde el exterior, pero aún pueden ser accedidos si se sabe
cómo hacerlo.
class Persona:
def __init__(self, nombre, edad):
self.__nombre = nombre
self.__edad = edad
def get_nombre(self):
return self.__nombre
def get_edad(self):
return self.__edad
__edad, que solo pueden ser accedidos desde dentro de la clase. También tiene
cuatro métodos, dos para obtener (get) y dos para establecer (set) el valor de
cada uno de los atributos. Los métodos get y set son necesarios porque los
30
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Modularidad
una parte del programa completo y se puede importar a otro módulo para su uso.
crear un archivo [Link] que contenga una función sumar que suma dos
números, un archivo [Link] que contenga una función restar que resta dos
multiplica dos números, y un archivo [Link] que contenga una función dividir
que divide dos números. Luego, podemos importar cada módulo en nuestro
31
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
# [Link]
def sumar(a, b):
return a + b
# [Link]
def restar(a, b):
return a - b
# [Link]
def multiplicar(a, b):
return a * b
# [Link]
def dividir(a, b):
if b == 0:
return "No se puede dividir por cero"
else:
return a / b
# programa principal
import suma
import resta
import multiplicacion
import division
a = 10
b = 5
En este ejemplo, se han creado cuatro módulos separados, cada uno con
una función que realiza una operación matemática diferente. Luego, se han
según sea necesario. Este enfoque de modularidad hace que el código sea más
separado sin afectar al resto del programa. Además, si necesitamos realizar las
importar los módulos existentes en lugar de tener que volver a escribir todo el
código.
32
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Polimorfismo
comporte como si fuera de otra clase. Esto se puede lograr (entre otras formas)
hereda de una clase base por lo que obtiene todos los métodos, campos,
Ejemplo:
33
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
distinto (polimorfismo).
class Forma:
def __init__(self, nombre):
[Link] = nombre
def dibujar(self):
pass
class Rectangulo(Forma):
def dibujar(self):
return "dibuja un rectángulo!"
class Circulo(Form):
def dibujar(self):
return "dibuja un círculo!"
forma1 = Rectangulo("R1")
forma2 = Circulo("C1")
Tipificación
“Los tipos son la puesta en vigor de la clase de los objetos, de modo que
([Link]
[Link])
Concurrencia
no está activo.
34
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Persistencia
deja de existir) y/o el espacio (la posición del objeto varía con respecto al espacio
Clases estáticas
En Python, una clase estática es una clase que no se puede heredar y no
class StaticClass:
@classmethod
def static_method(cls):
print("Este es un método estático de la clase.")
35
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Interfaces
Una interface es un contrato que toda clase que la implemente debe
y formales.
por defecto llamado ABC (Abstract Base Classes). Los ABC fueron añadidos a
se fuerza a las clases que usan ese interfaz a implementar los métodos.
módulo ABC:
class Mando(ABC):
@abstractmethod
def encender(self):
pass
@abstractmethod
def apagar(self):
pass
class Television(Mando):
def encender(self):
print("La televisión está encendida.")
def apagar(self):
print("La televisión está apagada.")
tv = Television()
[Link]() # Imprime "La televisión está encendida."
[Link]() # Imprime "La televisión está apagada."
En este ejemplo, se define una clase abstracta Mando que hereda de ABC
36
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
Referencias
Apuntes Programa Clip - Felipe Steffolani
[Link]
[Link]
[Link]
[Link]
[Link]
[Link]
rientada%20a%20Objetos/Apunte%20Teorico%20de%20Programacion%[Link]
37
ISPC / Tecnicatura Superior en Desarrollo Web y Aplicaciones Digitales
38