Fundamentos de Programación en Python POO
Fundamentos de Programación en Python POO
Programación en Python:
Módulo 6
Los conceptos básicos del enfoque orientado a objetos
El enfoque orientado a objetos es
particularmente útil cuando se aplica a
proyectos grandes y complejos llevados a
cabo por grandes equipos formados por
muchos desarrolladores.
¿Hay algún vinculo entre estos dos mundos? Por supuesto que sí. Las
funciones procesan los datos (información) pero no a la inversa.
No existe un límite claro entre los datos y el código: viven como uno solo
dentro de los objetos.
Jerarquías de clase
La clase que nos concierne es como una categoría, como resultado de
similitudes definidas con precisión.
Vehículos Terrestres.
Vehículos Acuáticos.
Vehículos Aéreos.
Vehículos Espaciales.
Los vehículos terrestres pueden dividirse aún más, según el método con el
que impactan el suelo. Entonces, podemos enumerar:
1. Vehículos de ruedas.
2. Vehículos oruga.
3. Aerodeslizadores.
Jerarquías de clase:
continuación
Otro ejemplo es la jerarquía del reino taxonómico de los animales.
Podemos decir que todos los animales (nuestra clase de nivel superior) se
puede dividir en cinco subclases:
1. Mamíferos.
2. Reptiles.
3. Pájaros.
4. Peces.
5. Anfibios.
1. Mamíferos salvajes.
2. Mamíferos domesticados.
¿Qué es un objeto?
Una clase (entre otras definiciones) es un conjunto de objetos. Un objeto
es un ser perteneciente a una clase.
Un objeto es una encarnación de los requisitos, rasgos y cualidades
asignados a una clase específica.
Las clases forman una jerarquía. Esto puede significar que un objeto que
pertenece a una clase específica pertenece a todas las superclases al
mismo tiempo.
Ejemplos:
Herencia
Cualquier objeto vinculado a un nivel específico de una jerarquía de clases
hereda todos los rasgos (así como los requisitos y cualidades)
definidos dentro de cualquiera de las superclases.
Tu primera clase
La programación orientada a objetos es el arte de definir y expandir
clases.
Para hacer esto, debes asignar una variable para almacenar el objeto
recién creado de esa clase y crear un objeto al mismo tiempo.
El objeto recién creado está equipado con todo lo que trae la clase;
Como esta clase está completamente vacía, el objeto también está
vacío.
def pop():
La pila: el enfoque
procedimental frente al
enfoque orientado a objetos
La pila creada anteriormente es funciona, pero no tan optima como
pensamos, a medida que la utilices la pila tendrá varias desventajas, por
ejemplo:
class Pila:
¿Cómo garantizar que dicha actividad tiene lugar cada vez que se crea
una nueva pila?
Hay una manera simple de hacerlo - tienes que equipar a la clase con una
función específica:
El constructor sabe todo acerca del objeto y debe tener las inicializaciones
necesarias.
Ejemplo:
class Pila:
El nombre del constructor es siempre __init__
def __init__(self):
print("¡Hola!")
El parámetro se usa para representar el objeto recién
creado: puedes usar el parámetro para manipular el
objetoPila = Pila() objeto y enriquecerlo con las propiedades necesarias;
class Pila:
Se agregaron dos guiones bajos
def __init__(self): antes del nombre listaPila
self.__listaPila = []
objetoPila = Pila()
print(len(objetoPila.__listaPila
))
El cambio invalida el programa..
¿Por qué?
Cuando cualquier componente de la clase tiene un nombre que comienza
con dos guiones bajos (__), se vuelve privado - esto significa que solo se
puede acceder desde la clase.
def __init__(self):
self.__listaPila = []
objetoPila1.push(3)
objetoPila2.push(objetoPila1.pop())
print(objetoPila2.pop())
Existen dos pilas creadas a partir de la misma clase base. Trabajan
independientemente.
pequeñaPila.push(1)
otraPila.push(pequeñaPila.pop() + 1)
graciosaPila.push(otraPila.pop() - 2)
print(graciosaPila.pop())
Vamos a agregar una nueva clase para manejar pilas.
El primer paso es fácil: solo define una nueva subclase que apunte a la
clase que se usará como superclase.
class SumarPila(Pila):
self.__sum = 0
Pila.__init__(self)
Ten en cuenta la sintaxis:
def pop(self):
val = Pila.pop(self)
self.__sum -= val
¿Cómoreturn
podemosvalmostrar el valor de __sum y que al mismo tiempo se
proteja de modificaciones?
def getSuma(self):
return self.__sum
Variables de instancia
En general, una clase puede equiparse con dos tipos diferentes de datos
para formar las propiedades de una clase.