Teoria Clases y Objetos
Teoria Clases y Objetos
Teoria Clases y Objetos
Definiciones.
Abstracción.
Clase y objetos.
Atributos y métodos.
Constructores.
Métodos de Acceso Setter y Getter.
>Python - Multiparadigma
Programación
Estructurada
Programación Orientada
a Objetos
admite Programación
Funcional
Módulo 4
* 2022 / 3° Cohorte.
>Programación Estructurada
Características
* 2022 / 3° Cohorte.
>Programación Orientada a
Objetos - POO
Características
Características
➔ El adecuado diseño de clases favorece la reusabilidad.
➔ La facilidad de añadir, suprimir o modificar nuevos objetos nos
permite hacer modificaciones de una forma muy sencilla.
Módulo 4
* 2022 / 3° Cohorte.
>Programación Orientada a
Objetos - POO
Enfoque del Paradigma
* 2022 / 3° Cohorte.
>Abstracción
En un problema computacional, la abstracción brinda a los programas
orientados a objetos sencillez de leer y comprender y mantener,
permiten ocultar detalles de implementación dejando visibles sólo los
detalles más relevantes.
* 2022 / 3° Cohorte.
>Abstracción
Por ejemplo, podemos abstraer a una Persona
Módulo 4
* 2022 / 3° Cohorte.
>¿A qué nos referimos con Objetos?
Tratamos de establecer una equivalencia entre un objeto del mundo real
con un componente software.
Por ejemplo:
Animales
Vehículos
Figuras Puntos
Módulo 4
(-2,14) (-1,-5)
(0,0) (7,3)
* 2022 / 3° Cohorte.
>¿A qué nos referimos con Objetos?
Todos los objetos presentan dos componentes principales:
● Un conjunto de características
● Un comportamiento determinado
* 2022 / 3° Cohorte.
>Componentes de un Objeto
Atributo
Métodos
”mensaje”.
* 2022 / 3° Cohorte.
>Clase
Las clases son plantillas para la creación de objetos. Como
tal, la clase forma la base para la programación orientada a
objetos, la cual es una de los principales paradigmas de
desarrollo de software en la actualidad.
* 2022 / 3° Cohorte.
>Clase
Como convención en el paradigma orientado a objetos, la
primera letra del nombre de una clase empieza con
mayúscula.
* 2022 / 3° Cohorte.
>Clase
Como puedes ver, la definición de una clase comienza con la
palabra clave class, y ClassName sería el nombre de la clase
(identificador)
* 2022 / 3° Cohorte.
>Clase
La sentencia pass no hace nada. Puede ser utilizada cuando
se requiere una sentencia sintácticamente pero el programa
no requiere acción alguna.
módulo 4.
* 2022 / 3° Cohorte.
>Instancia de una Clase - Objeto
Teniendo una clase podremos crear a partir de ella objetos
con características específicas. Es decir, emplearemos esa
“plantilla” o “molde” para crear un objeto.
* 2022 / 3° Cohorte.
>Instancia de una Clase - Objeto
Clase: Persona
- nombre Este será nuestro
- apellido “molde” o “plantilla”
pedrito es una instancia - dni
de la clase Persona - edad
Objeto: cami
Objeto: pedrito - nombre: Camila
instancias - apellido: Juarez
- nombre: Pedro
- dni: 40000101
- apellido:
- edad: 26
Sanchez
- dni: 64123001
- edad: 10 cami es otra instancia
de la clase Persona
Objeto: manolo
módulo 4.
- nombre: Manolo
manolo es otra
- apellido: Gomez
instancia de la clase - dni: 43123456 * 2022 / 3° Cohorte.
Persona - edad: 23
>Atributos
Como vimos previamente un objeto cuenta con atributos, que son
las características que puede tener.
* 2022 / 3° Cohorte.
>Métodos
La definición de un método (de instancia) es análoga a la de una
función ordinaria, pero incorporando un parámetro self es una variable
que representa la instancia de la clase.
* 2022 / 3° Cohorte.
>Constructor
Al instanciar objetos de esta clase Persona, todos ellos tendrán que
realizar el comportamiento que vemos en __init__(). Es decir,
cualquier objeto de esta clase, al momento de ser instanciado
tendrá nombre y apellido nulos o vacíos, dni y edad serán 0.
* 2022 / 3° Cohorte.
>Constructor
Al momento de inicializar los atributos de un objeto podemos
asignar ciertos datos mediante los parámetros del método
__init__().
* 2022 / 3° Cohorte.
>Constructor
Desafortunadamente en Python, no podemos definir varios
constructores a la vez. Es decir, no podemos definir más de un método
__init__() en la misma clase. Y si lo intentamos, solo se ejecutará el
último en ser definido.
* 2022 / 3° Cohorte.
>Constructor
El siguiente fragmento de código muestra cómo eliminar la necesidad
de varios constructores con el constructor con parámetros por default.
módulo 4.
* 2022 / 3° Cohorte.
>Encapsulamiento
Como hemos visto previamente, los atributos definidos en un
objeto son accesibles públicamente. Esto puede parecer extraño a
personas desarrolladoras de otros lenguajes. En Python existe un
cierto «sentido de responsabilidad» a la hora de programar y
manejar este tipo de situaciones.
* 2022 / 3° Cohorte.
>Encapsulamiento
Es el ocultamiento del estado de un objeto. Para lograr el
encapsulamiento de los objetos, los atributos de los mismos deben
ser únicamente modificados mediante operaciones. Para que los
atributos de una clase no sean accedidos de manera directa
debemos protegerlos.
* 2022 / 3° Cohorte.
>Métodos de Acceso - Setter y Getter
Para definir estos métodos en Python emplearemos decoradores y se
identifican por tener un @ (como lo veremos en el ejemplo).
* 2022 / 3° Cohorte.
>Métodos de Acceso - Setter y Getter
Una vez que los atributos están encapsulados para poder acceder
a ellos emplearemos los siguientes decoradores:Ya sea obtener o
modificar los datos de un objeto en particular, usaremos el
decorador
● @property para un getter, que nos permitirá obtener un dato
asociado a un atributo en concreto.
● @nombreAtributo.setter para un setter, que nos permitirá
modificar un atributo de en particular.
módulo 4.
>Métodos de Acceso - Setter y Getter
@property
Así definimos un getter para el
def nombre(self): atributo nombre, este método retorna
return self.__nombre dicho atributo que, como vemos se
encuentra encapsulado.
@nombre.setter
def nombre(self,nuevoNombre ): Así definimos un setter para el
atributo nombre, este método asigna
self.__nombre= nuevoNombre
un nuevo nombre al atributo que se
encuentra encapsulado.
módulo 4.
>Objetos
Una vez creado el modelo o Clase con sus atributos y
métodos, podemos instanciar objetos usando el constructor
definido dentro de la clase.
class Persona():
def __init__(self, nombre, apellido, dni, edad):
self.__nombre=nombre
self.__apellido=apellido
self.__dni=dni
módulo 4.
self._edad=edad
>Método __str__
print(pedrito) <__main__.Persona object at 0x00000214E9BFBDC0>
print(cami) <__main__.Persona object at 0x00000214E9BFBD60>
print(manolo) <__main__.Persona object at 0x00000214E9BFBD00>
def __str__(self):
cadena= "\nNombre: "+self.__nombre
cadena+= "\nApellido: "+self.__apellido
cadena+= "\nDNI: "+str(self.__dni)
cadena+= "\nEdad: "+str(self.__edad)
return cadena
módulo 4.
>Método __str__ Nombre: Pedro
Apellido:
Entonces si quisiéramos mostrar las Sanchez
mismas instancias del ejemplo DNI: 46412301
Nombre: Camila
Apellido:
print(pedrito)
Juarez
print(cami)
DNI: 382376168
print(manolo)
Edad: 26
Nombre: Manolo
Apellido: Gomez
módulo 4.
DNI: 43762129
Edad: 23
>Objetos
Si definieramos un constructor con parámetros por default,
como vimos anteriormente, podemos tener la siguiente
instancia: def __init__(self, nombre= "Carlos",
apellido="Santana", dni=12372364, edad=75):
self.__nombre=nombre
self.__apellido=apellido
self.__dni=dni
instanciamos 1 objeto
self.__edad=edad
unaPersona= Persona()
@nombre.setter
def nombre(self,nuevoNombre):
self.__nombre= nuevoNombre Pedro
módulo 4.
Camila
Manolo
Carlos
Objetos con Atributo datetime (fecha)
Para crear un objeto datetime usaremos lo siguiente:
1. Importar datetime
fecha = datetime(anio,mes,dia)
módulo 4.
>Objetos con Atributo datetime (fecha)
3. En el constructor de la clase Persona asignaremos la fecha con el
atributo correspondiente.
class Persona():
def __init__ (self, nombre, apellido , dni, edad,fecha):
self.__nombre =nombre
self.__apellido =apellido
self.__dni=dni
self.__edad=edad
self.__fecha=fecha
@property
def fecha(self):
return self.__fecha
módulo 4.
@fecha.setter
def fecha(self,fecha):
self.__fecha = fecha
>Objetos con Atributo datetime (fecha)
4. Crearemos un método para aplicar un formato personalizado a la
fecha:
def fechaString(self):
date_string= datetime.strftime(self.__fecha,"%d/%m/%y")
return date_string
módulo 4.
>Objetos con Atributo datetime (fecha)
Creamos el objeto datetime e instanciamos nuestra Persona.
Podemos probar el método para formatear el atributo de tipo fecha
from datetime import datetime
fecha= datetime(2022,10,12)
print("*** Fecha creada con datatime ***")
print(fecha)
p1= Persona("Ballesteros","Cristian",12345632,30,fecha)
informacion= p1
print(informacion)
print("*** Fecha del objeto llamando al metodo fechaString de la clase persona
***")
módulo 4.
fechaCadena= p1.fechaString()
print(fechaCadena)