Capítulo 6: Programación Orientada a Objetos en Python
6.2 Polimorfismo y Encapsulamiento
6.2.1 Polimorfismo
En la programación orientada a objetos, el polimorfismo se refiere a la capacidad de un objeto para adoptar muchas formas. Esto significa que una sola clase puede ser utilizada de múltiples maneras, o una clase hija puede cambiar la forma en que algunos métodos se comportan en comparación con su clase padre.
El polimorfismo es una herramienta poderosa para los desarrolladores de software, ya que permite un código más flexible y adaptable. Por ejemplo, imagina un programa que maneja diferentes tipos de formas, como círculos, cuadrados y rectángulos. En lugar de crear clases separadas para cada forma, un desarrollador podría crear una sola clase "Shape" que defina propiedades y métodos básicos, y luego crear clases hijas para cada forma específica.
Estas clases hijas podrían tener sus propias propiedades y métodos únicos, pero también heredarían las propiedades y métodos de la clase padre "Shape". Esto significa que el desarrollador podría escribir código que funcione con cualquier tipo de forma, sin tener que preocuparse por los detalles específicos de cada forma.
Además, si el desarrollador necesita agregar un nuevo tipo de forma al programa, simplemente puede crear una nueva clase hija que herede de la clase "Shape". Esto hace que el código sea más escalable y más fácil de mantener con el tiempo.
En conclusión, el polimorfismo es un concepto clave en la programación orientada a objetos que permite un código más flexible, adaptable y escalable. Al utilizar el polimorfismo de manera efectiva, los desarrolladores pueden crear programas que sean más fáciles de entender, modificar y extender con el tiempo.
Ejemplo:
La mejor manera de entender esto es a través de un ejemplo.
class Bird:
def intro(self):
print("There are many types of birds.")
def flight(self):
print("Most of the birds can fly but some cannot.")
class Sparrow(Bird):
def flight(self):
print("Sparrows can fly.")
class Ostrich(Bird):
def flight(self):
print("Ostriches cannot fly.")
obj_bird = Bird()
obj_spr = Sparrow()
obj_ost = Ostrich()
obj_bird.intro()
obj_bird.flight()
obj_spr.intro()
obj_spr.flight()
obj_ost.intro()
obj_ost.flight()
En el programa anterior, definimos dos clases Sparrow
y Ostrich
, ambas heredando de Bird
. El método flight
en Sparrow
y Ostrich
funciona de manera diferente, mostrando así polimorfismo.
6.2.2 Encapsulamiento
El encapsulamiento es un concepto crucial en la programación orientada a objetos. Involucra agrupar datos junto con los métodos que los manipulan en una única unidad. Al hacerlo, el encapsulamiento protege los datos de ser alterados o utilizados de manera incorrecta por factores externos.
Python proporciona una forma de limitar el acceso a métodos y variables mediante el uso de guiones bajos al principio (_). Esta técnica se conoce como encapsulamiento, la cual puede ayudar a mantener la integridad de los datos al prevenir la modificación directa. Además, podemos crear métodos de clase como privados agregando un doble guion bajo (__) delante del nombre del método. Esto mejora aún más el encapsulamiento al hacer que el método sea inaccesible desde fuentes externas.
En general, el encapsulamiento sirve como piedra angular de la programación orientada a objetos al proporcionar un medio para proteger los datos y garantizar su uso adecuado dentro de un programa. Al comprender la importancia del encapsulamiento y cómo se puede implementar en Python, los programadores pueden escribir un código más seguro y robusto.
Ejemplo:
class Computer:
def __init__(self):
self.__maxprice = 900
def sell(self):
print("Selling Price: {}".format(self.__maxprice))
def setMaxPrice(self, price):
self.__maxprice = price
c = Computer()
c.sell()
# change the price
c.__maxprice = 1000
c.sell()
# using setter function
c.setMaxPrice(1000)
c.sell()
En el programa anterior, definimos una clase Computer
y usamos el método __init__()
para almacenar el precio máximo de venta de Computer
. Intentamos modificar el precio. Sin embargo, no podemos cambiarlo porque Python trata a __maxprice
como atributos privados. Como programador de Python, para hacer que este atributo sea privado y no visible para los externos, usamos doble guion bajo (__) antes del nombre de los atributos y métodos. Sin embargo, Python nos proporciona el privilegio de actualizar el valor, utilizando métodos de configuración. Entonces, para cambiar el valor, hemos usado el método setMaxPrice()
.
En resumen, la encapsulación es un concepto fundamental en la Programación Orientada a Objetos (POO) que implica envolver datos y los métodos que manipulan los datos en una única entidad. Esto ayuda a prevenir la modificación accidental de los datos. La encapsulación es una forma de asegurar que el estado interno de un objeto no pueda ser alterado directamente desde fuera del objeto, sino que solo puede ser accedido o modificado a través de sus métodos, garantizando su integridad.
Además, la encapsulación también ayuda a mejorar la organización y mantenibilidad del código. Al encapsular datos y métodos en una sola entidad, el código se vuelve más modular y más fácil de entender. Esto facilita la modificación y el mantenimiento del código con el tiempo.
Además, cuando se combina con el polimorfismo, la encapsulación se vuelve aún más poderosa. El polimorfismo es la capacidad de un objeto de adoptar muchas formas. Esto significa que un objeto puede ser utilizado en diferentes contextos y puede comportarse de manera diferente dependiendo del contexto en el que se utilice. Junto con la encapsulación, el polimorfismo permite un código más eficiente y flexible que puede adaptarse a diferentes situaciones.
Por lo tanto, es importante entender los principios de encapsulación y polimorfismo para escribir código eficiente, organizado y mantenible en POO. Al implementar estos principios, los desarrolladores pueden crear código que sea más robusto, flexible y adaptable a los requisitos y entornos cambiantes.
Con Polimorfismo, la "tipificación pato" de Python te permite usar cualquier objeto que proporcione el comportamiento requerido sin forzarlo a ser una subclase de ninguna clase específica o implementar ninguna interfaz específica. Esto conduce a un código más reutilizable y limpio.
Con Encapsulamiento, estás asegurando que el estado interno del objeto no pueda ser cambiado excepto a través de sus propios métodos. Esta encapsulación proporciona un escudo que protege los datos de ser alterados por métodos externos. También permite que los objetos interactúen en un sistema complejo sin necesidad de conocer demasiado sobre los demás, haciendo que el código sea más mantenible y flexible ante cambios.
Además, combinando estos principios con los discutidos anteriormente (es decir, herencia, super y sobrescritura de métodos), puedes escribir programas Python que aprovechen al máximo los beneficios de la programación orientada a objetos. Esto puede llevar a un código que sea más legible, reutilizable y fácil de mantener o actualizar.
En el próximo tema, continuaremos explorando la programación orientada a objetos discutiendo características más avanzadas, incluyendo métodos mágicos y classmethods/staticmethods. Esto te permitirá aprovechar aún más el poder del modelo de objetos flexible de Python.
Ahora que tenemos un buen entendimiento de la implementación de clases, objetos, herencia, polimorfismo y encapsulamiento en Python, podemos seguir ampliando nuestro conocimiento sobre temas más avanzados en las próximas secciones.
6.2 Polimorfismo y Encapsulamiento
6.2.1 Polimorfismo
En la programación orientada a objetos, el polimorfismo se refiere a la capacidad de un objeto para adoptar muchas formas. Esto significa que una sola clase puede ser utilizada de múltiples maneras, o una clase hija puede cambiar la forma en que algunos métodos se comportan en comparación con su clase padre.
El polimorfismo es una herramienta poderosa para los desarrolladores de software, ya que permite un código más flexible y adaptable. Por ejemplo, imagina un programa que maneja diferentes tipos de formas, como círculos, cuadrados y rectángulos. En lugar de crear clases separadas para cada forma, un desarrollador podría crear una sola clase "Shape" que defina propiedades y métodos básicos, y luego crear clases hijas para cada forma específica.
Estas clases hijas podrían tener sus propias propiedades y métodos únicos, pero también heredarían las propiedades y métodos de la clase padre "Shape". Esto significa que el desarrollador podría escribir código que funcione con cualquier tipo de forma, sin tener que preocuparse por los detalles específicos de cada forma.
Además, si el desarrollador necesita agregar un nuevo tipo de forma al programa, simplemente puede crear una nueva clase hija que herede de la clase "Shape". Esto hace que el código sea más escalable y más fácil de mantener con el tiempo.
En conclusión, el polimorfismo es un concepto clave en la programación orientada a objetos que permite un código más flexible, adaptable y escalable. Al utilizar el polimorfismo de manera efectiva, los desarrolladores pueden crear programas que sean más fáciles de entender, modificar y extender con el tiempo.
Ejemplo:
La mejor manera de entender esto es a través de un ejemplo.
class Bird:
def intro(self):
print("There are many types of birds.")
def flight(self):
print("Most of the birds can fly but some cannot.")
class Sparrow(Bird):
def flight(self):
print("Sparrows can fly.")
class Ostrich(Bird):
def flight(self):
print("Ostriches cannot fly.")
obj_bird = Bird()
obj_spr = Sparrow()
obj_ost = Ostrich()
obj_bird.intro()
obj_bird.flight()
obj_spr.intro()
obj_spr.flight()
obj_ost.intro()
obj_ost.flight()
En el programa anterior, definimos dos clases Sparrow
y Ostrich
, ambas heredando de Bird
. El método flight
en Sparrow
y Ostrich
funciona de manera diferente, mostrando así polimorfismo.
6.2.2 Encapsulamiento
El encapsulamiento es un concepto crucial en la programación orientada a objetos. Involucra agrupar datos junto con los métodos que los manipulan en una única unidad. Al hacerlo, el encapsulamiento protege los datos de ser alterados o utilizados de manera incorrecta por factores externos.
Python proporciona una forma de limitar el acceso a métodos y variables mediante el uso de guiones bajos al principio (_). Esta técnica se conoce como encapsulamiento, la cual puede ayudar a mantener la integridad de los datos al prevenir la modificación directa. Además, podemos crear métodos de clase como privados agregando un doble guion bajo (__) delante del nombre del método. Esto mejora aún más el encapsulamiento al hacer que el método sea inaccesible desde fuentes externas.
En general, el encapsulamiento sirve como piedra angular de la programación orientada a objetos al proporcionar un medio para proteger los datos y garantizar su uso adecuado dentro de un programa. Al comprender la importancia del encapsulamiento y cómo se puede implementar en Python, los programadores pueden escribir un código más seguro y robusto.
Ejemplo:
class Computer:
def __init__(self):
self.__maxprice = 900
def sell(self):
print("Selling Price: {}".format(self.__maxprice))
def setMaxPrice(self, price):
self.__maxprice = price
c = Computer()
c.sell()
# change the price
c.__maxprice = 1000
c.sell()
# using setter function
c.setMaxPrice(1000)
c.sell()
En el programa anterior, definimos una clase Computer
y usamos el método __init__()
para almacenar el precio máximo de venta de Computer
. Intentamos modificar el precio. Sin embargo, no podemos cambiarlo porque Python trata a __maxprice
como atributos privados. Como programador de Python, para hacer que este atributo sea privado y no visible para los externos, usamos doble guion bajo (__) antes del nombre de los atributos y métodos. Sin embargo, Python nos proporciona el privilegio de actualizar el valor, utilizando métodos de configuración. Entonces, para cambiar el valor, hemos usado el método setMaxPrice()
.
En resumen, la encapsulación es un concepto fundamental en la Programación Orientada a Objetos (POO) que implica envolver datos y los métodos que manipulan los datos en una única entidad. Esto ayuda a prevenir la modificación accidental de los datos. La encapsulación es una forma de asegurar que el estado interno de un objeto no pueda ser alterado directamente desde fuera del objeto, sino que solo puede ser accedido o modificado a través de sus métodos, garantizando su integridad.
Además, la encapsulación también ayuda a mejorar la organización y mantenibilidad del código. Al encapsular datos y métodos en una sola entidad, el código se vuelve más modular y más fácil de entender. Esto facilita la modificación y el mantenimiento del código con el tiempo.
Además, cuando se combina con el polimorfismo, la encapsulación se vuelve aún más poderosa. El polimorfismo es la capacidad de un objeto de adoptar muchas formas. Esto significa que un objeto puede ser utilizado en diferentes contextos y puede comportarse de manera diferente dependiendo del contexto en el que se utilice. Junto con la encapsulación, el polimorfismo permite un código más eficiente y flexible que puede adaptarse a diferentes situaciones.
Por lo tanto, es importante entender los principios de encapsulación y polimorfismo para escribir código eficiente, organizado y mantenible en POO. Al implementar estos principios, los desarrolladores pueden crear código que sea más robusto, flexible y adaptable a los requisitos y entornos cambiantes.
Con Polimorfismo, la "tipificación pato" de Python te permite usar cualquier objeto que proporcione el comportamiento requerido sin forzarlo a ser una subclase de ninguna clase específica o implementar ninguna interfaz específica. Esto conduce a un código más reutilizable y limpio.
Con Encapsulamiento, estás asegurando que el estado interno del objeto no pueda ser cambiado excepto a través de sus propios métodos. Esta encapsulación proporciona un escudo que protege los datos de ser alterados por métodos externos. También permite que los objetos interactúen en un sistema complejo sin necesidad de conocer demasiado sobre los demás, haciendo que el código sea más mantenible y flexible ante cambios.
Además, combinando estos principios con los discutidos anteriormente (es decir, herencia, super y sobrescritura de métodos), puedes escribir programas Python que aprovechen al máximo los beneficios de la programación orientada a objetos. Esto puede llevar a un código que sea más legible, reutilizable y fácil de mantener o actualizar.
En el próximo tema, continuaremos explorando la programación orientada a objetos discutiendo características más avanzadas, incluyendo métodos mágicos y classmethods/staticmethods. Esto te permitirá aprovechar aún más el poder del modelo de objetos flexible de Python.
Ahora que tenemos un buen entendimiento de la implementación de clases, objetos, herencia, polimorfismo y encapsulamiento en Python, podemos seguir ampliando nuestro conocimiento sobre temas más avanzados en las próximas secciones.
6.2 Polimorfismo y Encapsulamiento
6.2.1 Polimorfismo
En la programación orientada a objetos, el polimorfismo se refiere a la capacidad de un objeto para adoptar muchas formas. Esto significa que una sola clase puede ser utilizada de múltiples maneras, o una clase hija puede cambiar la forma en que algunos métodos se comportan en comparación con su clase padre.
El polimorfismo es una herramienta poderosa para los desarrolladores de software, ya que permite un código más flexible y adaptable. Por ejemplo, imagina un programa que maneja diferentes tipos de formas, como círculos, cuadrados y rectángulos. En lugar de crear clases separadas para cada forma, un desarrollador podría crear una sola clase "Shape" que defina propiedades y métodos básicos, y luego crear clases hijas para cada forma específica.
Estas clases hijas podrían tener sus propias propiedades y métodos únicos, pero también heredarían las propiedades y métodos de la clase padre "Shape". Esto significa que el desarrollador podría escribir código que funcione con cualquier tipo de forma, sin tener que preocuparse por los detalles específicos de cada forma.
Además, si el desarrollador necesita agregar un nuevo tipo de forma al programa, simplemente puede crear una nueva clase hija que herede de la clase "Shape". Esto hace que el código sea más escalable y más fácil de mantener con el tiempo.
En conclusión, el polimorfismo es un concepto clave en la programación orientada a objetos que permite un código más flexible, adaptable y escalable. Al utilizar el polimorfismo de manera efectiva, los desarrolladores pueden crear programas que sean más fáciles de entender, modificar y extender con el tiempo.
Ejemplo:
La mejor manera de entender esto es a través de un ejemplo.
class Bird:
def intro(self):
print("There are many types of birds.")
def flight(self):
print("Most of the birds can fly but some cannot.")
class Sparrow(Bird):
def flight(self):
print("Sparrows can fly.")
class Ostrich(Bird):
def flight(self):
print("Ostriches cannot fly.")
obj_bird = Bird()
obj_spr = Sparrow()
obj_ost = Ostrich()
obj_bird.intro()
obj_bird.flight()
obj_spr.intro()
obj_spr.flight()
obj_ost.intro()
obj_ost.flight()
En el programa anterior, definimos dos clases Sparrow
y Ostrich
, ambas heredando de Bird
. El método flight
en Sparrow
y Ostrich
funciona de manera diferente, mostrando así polimorfismo.
6.2.2 Encapsulamiento
El encapsulamiento es un concepto crucial en la programación orientada a objetos. Involucra agrupar datos junto con los métodos que los manipulan en una única unidad. Al hacerlo, el encapsulamiento protege los datos de ser alterados o utilizados de manera incorrecta por factores externos.
Python proporciona una forma de limitar el acceso a métodos y variables mediante el uso de guiones bajos al principio (_). Esta técnica se conoce como encapsulamiento, la cual puede ayudar a mantener la integridad de los datos al prevenir la modificación directa. Además, podemos crear métodos de clase como privados agregando un doble guion bajo (__) delante del nombre del método. Esto mejora aún más el encapsulamiento al hacer que el método sea inaccesible desde fuentes externas.
En general, el encapsulamiento sirve como piedra angular de la programación orientada a objetos al proporcionar un medio para proteger los datos y garantizar su uso adecuado dentro de un programa. Al comprender la importancia del encapsulamiento y cómo se puede implementar en Python, los programadores pueden escribir un código más seguro y robusto.
Ejemplo:
class Computer:
def __init__(self):
self.__maxprice = 900
def sell(self):
print("Selling Price: {}".format(self.__maxprice))
def setMaxPrice(self, price):
self.__maxprice = price
c = Computer()
c.sell()
# change the price
c.__maxprice = 1000
c.sell()
# using setter function
c.setMaxPrice(1000)
c.sell()
En el programa anterior, definimos una clase Computer
y usamos el método __init__()
para almacenar el precio máximo de venta de Computer
. Intentamos modificar el precio. Sin embargo, no podemos cambiarlo porque Python trata a __maxprice
como atributos privados. Como programador de Python, para hacer que este atributo sea privado y no visible para los externos, usamos doble guion bajo (__) antes del nombre de los atributos y métodos. Sin embargo, Python nos proporciona el privilegio de actualizar el valor, utilizando métodos de configuración. Entonces, para cambiar el valor, hemos usado el método setMaxPrice()
.
En resumen, la encapsulación es un concepto fundamental en la Programación Orientada a Objetos (POO) que implica envolver datos y los métodos que manipulan los datos en una única entidad. Esto ayuda a prevenir la modificación accidental de los datos. La encapsulación es una forma de asegurar que el estado interno de un objeto no pueda ser alterado directamente desde fuera del objeto, sino que solo puede ser accedido o modificado a través de sus métodos, garantizando su integridad.
Además, la encapsulación también ayuda a mejorar la organización y mantenibilidad del código. Al encapsular datos y métodos en una sola entidad, el código se vuelve más modular y más fácil de entender. Esto facilita la modificación y el mantenimiento del código con el tiempo.
Además, cuando se combina con el polimorfismo, la encapsulación se vuelve aún más poderosa. El polimorfismo es la capacidad de un objeto de adoptar muchas formas. Esto significa que un objeto puede ser utilizado en diferentes contextos y puede comportarse de manera diferente dependiendo del contexto en el que se utilice. Junto con la encapsulación, el polimorfismo permite un código más eficiente y flexible que puede adaptarse a diferentes situaciones.
Por lo tanto, es importante entender los principios de encapsulación y polimorfismo para escribir código eficiente, organizado y mantenible en POO. Al implementar estos principios, los desarrolladores pueden crear código que sea más robusto, flexible y adaptable a los requisitos y entornos cambiantes.
Con Polimorfismo, la "tipificación pato" de Python te permite usar cualquier objeto que proporcione el comportamiento requerido sin forzarlo a ser una subclase de ninguna clase específica o implementar ninguna interfaz específica. Esto conduce a un código más reutilizable y limpio.
Con Encapsulamiento, estás asegurando que el estado interno del objeto no pueda ser cambiado excepto a través de sus propios métodos. Esta encapsulación proporciona un escudo que protege los datos de ser alterados por métodos externos. También permite que los objetos interactúen en un sistema complejo sin necesidad de conocer demasiado sobre los demás, haciendo que el código sea más mantenible y flexible ante cambios.
Además, combinando estos principios con los discutidos anteriormente (es decir, herencia, super y sobrescritura de métodos), puedes escribir programas Python que aprovechen al máximo los beneficios de la programación orientada a objetos. Esto puede llevar a un código que sea más legible, reutilizable y fácil de mantener o actualizar.
En el próximo tema, continuaremos explorando la programación orientada a objetos discutiendo características más avanzadas, incluyendo métodos mágicos y classmethods/staticmethods. Esto te permitirá aprovechar aún más el poder del modelo de objetos flexible de Python.
Ahora que tenemos un buen entendimiento de la implementación de clases, objetos, herencia, polimorfismo y encapsulamiento en Python, podemos seguir ampliando nuestro conocimiento sobre temas más avanzados en las próximas secciones.
6.2 Polimorfismo y Encapsulamiento
6.2.1 Polimorfismo
En la programación orientada a objetos, el polimorfismo se refiere a la capacidad de un objeto para adoptar muchas formas. Esto significa que una sola clase puede ser utilizada de múltiples maneras, o una clase hija puede cambiar la forma en que algunos métodos se comportan en comparación con su clase padre.
El polimorfismo es una herramienta poderosa para los desarrolladores de software, ya que permite un código más flexible y adaptable. Por ejemplo, imagina un programa que maneja diferentes tipos de formas, como círculos, cuadrados y rectángulos. En lugar de crear clases separadas para cada forma, un desarrollador podría crear una sola clase "Shape" que defina propiedades y métodos básicos, y luego crear clases hijas para cada forma específica.
Estas clases hijas podrían tener sus propias propiedades y métodos únicos, pero también heredarían las propiedades y métodos de la clase padre "Shape". Esto significa que el desarrollador podría escribir código que funcione con cualquier tipo de forma, sin tener que preocuparse por los detalles específicos de cada forma.
Además, si el desarrollador necesita agregar un nuevo tipo de forma al programa, simplemente puede crear una nueva clase hija que herede de la clase "Shape". Esto hace que el código sea más escalable y más fácil de mantener con el tiempo.
En conclusión, el polimorfismo es un concepto clave en la programación orientada a objetos que permite un código más flexible, adaptable y escalable. Al utilizar el polimorfismo de manera efectiva, los desarrolladores pueden crear programas que sean más fáciles de entender, modificar y extender con el tiempo.
Ejemplo:
La mejor manera de entender esto es a través de un ejemplo.
class Bird:
def intro(self):
print("There are many types of birds.")
def flight(self):
print("Most of the birds can fly but some cannot.")
class Sparrow(Bird):
def flight(self):
print("Sparrows can fly.")
class Ostrich(Bird):
def flight(self):
print("Ostriches cannot fly.")
obj_bird = Bird()
obj_spr = Sparrow()
obj_ost = Ostrich()
obj_bird.intro()
obj_bird.flight()
obj_spr.intro()
obj_spr.flight()
obj_ost.intro()
obj_ost.flight()
En el programa anterior, definimos dos clases Sparrow
y Ostrich
, ambas heredando de Bird
. El método flight
en Sparrow
y Ostrich
funciona de manera diferente, mostrando así polimorfismo.
6.2.2 Encapsulamiento
El encapsulamiento es un concepto crucial en la programación orientada a objetos. Involucra agrupar datos junto con los métodos que los manipulan en una única unidad. Al hacerlo, el encapsulamiento protege los datos de ser alterados o utilizados de manera incorrecta por factores externos.
Python proporciona una forma de limitar el acceso a métodos y variables mediante el uso de guiones bajos al principio (_). Esta técnica se conoce como encapsulamiento, la cual puede ayudar a mantener la integridad de los datos al prevenir la modificación directa. Además, podemos crear métodos de clase como privados agregando un doble guion bajo (__) delante del nombre del método. Esto mejora aún más el encapsulamiento al hacer que el método sea inaccesible desde fuentes externas.
En general, el encapsulamiento sirve como piedra angular de la programación orientada a objetos al proporcionar un medio para proteger los datos y garantizar su uso adecuado dentro de un programa. Al comprender la importancia del encapsulamiento y cómo se puede implementar en Python, los programadores pueden escribir un código más seguro y robusto.
Ejemplo:
class Computer:
def __init__(self):
self.__maxprice = 900
def sell(self):
print("Selling Price: {}".format(self.__maxprice))
def setMaxPrice(self, price):
self.__maxprice = price
c = Computer()
c.sell()
# change the price
c.__maxprice = 1000
c.sell()
# using setter function
c.setMaxPrice(1000)
c.sell()
En el programa anterior, definimos una clase Computer
y usamos el método __init__()
para almacenar el precio máximo de venta de Computer
. Intentamos modificar el precio. Sin embargo, no podemos cambiarlo porque Python trata a __maxprice
como atributos privados. Como programador de Python, para hacer que este atributo sea privado y no visible para los externos, usamos doble guion bajo (__) antes del nombre de los atributos y métodos. Sin embargo, Python nos proporciona el privilegio de actualizar el valor, utilizando métodos de configuración. Entonces, para cambiar el valor, hemos usado el método setMaxPrice()
.
En resumen, la encapsulación es un concepto fundamental en la Programación Orientada a Objetos (POO) que implica envolver datos y los métodos que manipulan los datos en una única entidad. Esto ayuda a prevenir la modificación accidental de los datos. La encapsulación es una forma de asegurar que el estado interno de un objeto no pueda ser alterado directamente desde fuera del objeto, sino que solo puede ser accedido o modificado a través de sus métodos, garantizando su integridad.
Además, la encapsulación también ayuda a mejorar la organización y mantenibilidad del código. Al encapsular datos y métodos en una sola entidad, el código se vuelve más modular y más fácil de entender. Esto facilita la modificación y el mantenimiento del código con el tiempo.
Además, cuando se combina con el polimorfismo, la encapsulación se vuelve aún más poderosa. El polimorfismo es la capacidad de un objeto de adoptar muchas formas. Esto significa que un objeto puede ser utilizado en diferentes contextos y puede comportarse de manera diferente dependiendo del contexto en el que se utilice. Junto con la encapsulación, el polimorfismo permite un código más eficiente y flexible que puede adaptarse a diferentes situaciones.
Por lo tanto, es importante entender los principios de encapsulación y polimorfismo para escribir código eficiente, organizado y mantenible en POO. Al implementar estos principios, los desarrolladores pueden crear código que sea más robusto, flexible y adaptable a los requisitos y entornos cambiantes.
Con Polimorfismo, la "tipificación pato" de Python te permite usar cualquier objeto que proporcione el comportamiento requerido sin forzarlo a ser una subclase de ninguna clase específica o implementar ninguna interfaz específica. Esto conduce a un código más reutilizable y limpio.
Con Encapsulamiento, estás asegurando que el estado interno del objeto no pueda ser cambiado excepto a través de sus propios métodos. Esta encapsulación proporciona un escudo que protege los datos de ser alterados por métodos externos. También permite que los objetos interactúen en un sistema complejo sin necesidad de conocer demasiado sobre los demás, haciendo que el código sea más mantenible y flexible ante cambios.
Además, combinando estos principios con los discutidos anteriormente (es decir, herencia, super y sobrescritura de métodos), puedes escribir programas Python que aprovechen al máximo los beneficios de la programación orientada a objetos. Esto puede llevar a un código que sea más legible, reutilizable y fácil de mantener o actualizar.
En el próximo tema, continuaremos explorando la programación orientada a objetos discutiendo características más avanzadas, incluyendo métodos mágicos y classmethods/staticmethods. Esto te permitirá aprovechar aún más el poder del modelo de objetos flexible de Python.
Ahora que tenemos un buen entendimiento de la implementación de clases, objetos, herencia, polimorfismo y encapsulamiento en Python, podemos seguir ampliando nuestro conocimiento sobre temas más avanzados en las próximas secciones.