Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Cualquier cosa u objeto del mundo real puede ser representada mediante una clase. Las
clases representadas tienen diferentes características que se conocen como atributos. Por
otro lado, las clases tienen diferentes funcionalidades o acciones que pueden realizar,
conocidas en la POO como métodos.
• Herencia
• Cohesión
• Abstracción
• Polimorfismo
• Acoplamiento
• Encapsulamiento
Herencia:
Es el mecanismo por el cual una clase permite heredar las características (atributos y
métodos) de otra clase
Abstracción:
Cohesión:
Medida que indica si una clase tiene una función bien definida dentro del sistema. El objetivo
es enfocar de la forma más precisa posible el propósito de la clase. Cuanto más
enfoquemos el propósito de la clase, mayor será su cohesión.
GFPI-F-135 V01
Polimorfismo:
Es la capacidad que tienen los objetos de una clase en ofrecer respuesta distinta e
independiente en función de los parámetros (diferentes implementaciones) utilizados
durante su invocación. Dicho de otro modo el objeto como entidad puede contener valores
de diferentes tipos durante la ejecución del programa.
Acoplamiento:
Encapsulamiento:
Es el proceso que consiste en organizar los datos y operaciones (métodos) de una clase
que constituyen su estructura y su comportamiento con el fin de evitar el acceso a datos
por cualquier otro medio que no sea el especificado y por esto el encapsulamiento de datos
asegura la integridad de los datos que contiene el objeto
GFPI-F-135 V01
Representación en Python
class Perro:
def ladrar(self):
print("Guau")
self es un parámetro especial que siempre se utilizará como una referencia al objeto mismo.
Debe ser siempre el primer parámetro formal; no obstante, nunca se le dará un valor de
parámetro real en la invocación.
Accediendo a atributos
GFPI-F-135 V01
Accediendo a los métodos
Encapsulación de Atributos
Para definir un atributo como privado debemos anteponer dos guiones seguidos al nombre
del atributo como se muestra a continuación con el atributo identificación; y para poder
acceder al atributo creamos un método que retorne o modifique su valor.
class Persona():
def getIdentificacion(self):
return self.__identificacion
GFPI-F-135 V01
def getNombre(self):
return self.nombre
def setNombre(self,nombre):
self.nombre=nombre
def getCorreo(self):
return self.correo
def setCorreo(self,correo):
self.correo=correo
como el atributo es privado no podemos acceder a él de forma directa sino que tenemos
que hacerlo a partir de un método.
p = Persona(11,"Pedro","pedro@yahoo.com")
@property
def identificacion(self):
return self.__identificacion
En el código anterior parece un método pero en realidad no lo es, debe ser tratado como
un atributo. Por lo tanto al llamado no debemos colocar los paréntesis.
Ejemplo de implementación:
GFPI-F-135 V01
Representación de Herencia
Proceso mediante 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.
GFPI-F-135 V01
Representación en Python
class Persona():
def getIdentificacion(self):
return self.__identificacion
def getNombre(self):
return self.__nombre
def setNombre(self,nombre):
self.__nombre=nombre
def getCorreo(self):
return self.__correo
def setCorreo(self,correo):
self.__correo=correo
class Aprendiz(Persona):
def getPuntajeIcfes(self):
return self.__puntajeIcfes
GFPI-F-135 V01
class Instructor(Persona):
def getEspecialidad(self):
return self.__especialidad
Polimorfismo
def saludar(self):
print(f"Desde Persona... Hola soy un objeto de tipo {type(self).__
name__}")
def saludar(self):
print(f"Desde Aprendiz... Hola soy un objeto de tipo {type(self)._
_name__}")
def saludar(self):
print(f"Desde Instructor....Hola soy un objeto de tipo {type(self)
.__name__}")
En el escenario anterior tenemos un método que se llama igual tanto en la clase padre
como en la clase Hijo. Si se llama al método desde una clase hija se ejecuta el método
propio y sino llegará a existir ejecuta el método de la clase padre.
apr = Aprendiz(12,"juan","jjj@yahoo.com",300)
apr.saludar()
GFPI-F-135 V01
Relación de Agregación:
GFPI-F-135 V01
Representación en Python
class Alumno():
def __init__(self,nombre,edad):
self.nombre=nombre
self.edad=edad
def __str__(self):
return self.nombre
class Curso():
def __init__(self,nombre):
self.nombre=nombre
self.alumnos=[]
Implementación
#Creación de un curso
nuevoCurso = Curso("ADSI")
#Crear alumnos
alumno1 = Alumno("Maria",15)
alumno2 = Alumno("Jose",23)
#Matricular Alumnos
nuevoCurso.matricularAlumno(alumno1)
nuevoCurso.matricularAlumno(alumno2)
print("Alumnos")
for a in nuevoCurso.alumnos:
print(a)
GFPI-F-135 V01
Relación de Composición
GFPI-F-135 V01
Codificación en Python
class Empleado():
def __str__(self):
return self.nombre
class Empresa():
def __str__(self):
return self.nombre
def __del__(self):
print("Eliminado")
Implementación
GFPI-F-135 V01
#se imprimen los empleados de la empresa
for empleado in elSENA.empleados:
print(empleado)
Al ejecutar al final debe mostrar algún error por intentar mostrar los empleados de la
empresa elSENA que ya no existe
Referencias:
GFPI-F-135 V01