POO (Programación Orientada A Objetos)

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 10

El diseño orientado a objetos consiste en averiguar cuáles son los objetos de un sistema,

las clases en que se pueden agrupar y las relaciones entre objetos.

Cuando tenemos un problema es necesario realizar previamente el análisis, una de las


formas como podemos solucionarlo es haciendo uso del paradigma de programación
orientada a objetos, este busca resolver una problemática a partir de clases y objetos.

Objeto clase e instancia:

· Un ​objeto​ es cualquier cosa tangible o intangible que se pueda imaginar, definida


frente al exterior mediante unos atributos y las operaciones que permiten modificar
dichos atributos. Por ejemplo, una cita de una agenda electrónica, un motor de un coche
o una cuenta bancaria son ejemplos de objetos.

· Una ​clase​ es una plantilla que permite definir un conjunto de objetos, por ejemplo, un
automóvil es una clase de objetos caracterizados por tener motor, cuatro ruedas, etc. Un
Opell Vectra y un Renault Megane son objetos automóviles particulares que se obtienen
instanciando la clase automóvil para esos casos particulares.

· Los atributos son características que definen una propiedad de un objeto

· ​Instanciación​ es la creación de un objeto a partir de una clase.

Es necesario definir una clase antes de poder crear una instancia(objeto)de la clase. En
el diseño orientado a objetos, se definen los atributos externos de un objeto y los
métodos que exporta. El resto de información quedará oculta

Supongamos que estamos realizando un programa para generar encuestas, donde el


usuario de la aplicación podrá seleccionar la cantidad de preguntas que desea realizar, y
posteriormente pueda crear cada pregunta ya sean de selección múltiple, verdadero o falso
o completar.

Para nuestro problema podríamos definir la clase encuesta, la cual tendrá como atributos un
número entero llamado cantidadDePreguntas el cual almacenará la cantidad de preguntas
que el usuario desee ingresar y un arreglo de objetos de otra clase llamado preguntas.

La clase pregunta tendrá un atributo llamado pregunta qué será de tipo string y un arreglo
de String llamado opciones con las posibles respuestas, donde en la posición 0 se ubicará
la respuesta correcta.

Para crear una clase en java, vamos en netbeans>File<New File>en categorías


seleccionamos java>en File Types seleccionamos Java Class>le damos next> en Class
Name ponemos el nombre de la clase
Java

Python

class​ ​Encuesta​:

def _init_(self):

self.catidadDePreguntas ​=​ ​0

self.preguntas = []

Operaciones:

Una operación es una función o transformación que puede ser aplicada por o sobre objetos
de una clase. Cada operación tiene a un objeto determinado como argumento implícito y el
comportamiento de la operación depende de la clase de este objeto.

Operación polimórfica: la misma operación toma formas diferentes.

Método​: implementación de una operación para una clase.

Toda clase debe contar con un método constructor. Este método es invocado al momento
de ejecutar la instrucción: new(en java), lo que ocurre en .python es que los atributos se
declaran en éste método, así que cada vez que se llama a la clase se llama al constructor
que se declara como def_init_(self):(en python). Estas operaciones se tiene la costumbre de
llamar por un verbo en infinitivo -que describe una acción-, como se observa en el ejemplo
de polimorfismo más adelante con la operación de​ h ​ acer un sonido.

Encapsulamiento

Permite proteger los atributos y los métodos para que solo puedan ser accedidos desde
ciertas partes y así se puedan proteger.

El encapsulamiento puede tener diferentes niveles de acceso los cuales son:

Público (Public): Todos pueden acceder a los datos o métodos de una clase que se definen
con este nivel, este es el nivel más bajo, esto es lo que tu quieres que la parte externa vea.
Protegido (Protected): Podemos decir que estas no son de acceso público, solamente son
accesibles dentro de su clase y por subclases.

Privado (Private): En este nivel se puede declarar miembros accesibles sólo para la propia
clase.

En java si usamos la palabra private a un atributo indica que no puede ser modificado a
menos que sea desde métodos de la misma clase.

Java

​ public class Persona

//Atributos

public string nombre;

private int edad;

Python

class​ ​Persona​:

def _init_(self):

self.nombre ​=​ ​‘’

self.__edad = 0​ “”los dos guiones bajos indica que es privado,

los demás son públicos por defecto””

Herencia

La herencia, que es una forma de reutilización de software en la que se crea una nueva
clase absorbiendo los miembros de una clase existente, y se mejoran con nuevas
capacidades, o con modificaciones en las capacidades ya existentes. Al crear una clase,
en vez de declarar miembros completamente nuevos, el programador puede designar
que la nueva clase hereda los miembros de una clase existente. Esta clase existente se
conoce como superclase, y la nueva clase se conoce como subclase. Cada subclase
puede convertirse en la superclase de futuras subclases.

Si analizamos en nuestro problema, las preguntas pueden ser de diferentes tipos, en este
caso consideraremos tres tipos de preguntas: preguntas de selección múltiple, preguntas de
verdadero o falso y preguntas de completar, es evidente que cada pregunta tendrá atributos
similares, así que vamos a definir la clase pregunta como clase padre y las clases que
heredarán de ella serán la clase pregunta de selección múltiple, pregunta de verdadero y
falso y pregunta de completar.
Java

Python

class​ ​Preguntas​:

def _init_(self):

self.pregunta ​=​ ​‘’

self.respuestaCorrecta = ‘’

def getPregunta(self):

return self.pregunta

def getRepuestaCorrecta(self):
return self.respuestaCorrecta

def setPregunta(self, pregunta):

return self.pregunta = pregunta

def setRepuestaCorrecta(self, repuestaCorrecta):

return self.repuestaCorrecta = repuestaCorrecta

--

class​ ​SeleccionMultiple(Preguntas)​:

def _init_(self):

# Invoca al constructor de clase Preguntas

Preguntas.__init__(self)

# Nuevos atributos

self.opcion1 ​=​ ​‘’

self.opcion2 ​=​ ​‘’

self.opcion3 ​=​ ​‘’

En aquellos casos donde se necesita crear una clase que, además de otros propios, deba
incluir los métodos definidos en otra, la herencia evita tener que reescribir todos esos
métodos en la nueva clase.

Clases abstractas:

Una clase abstracta es una clase sin instancias directas. Contiene una o más operaciones
abstractas. Una operación abstracta es aquella que se declara pero no se implementa. Una
clase abstracta no puede ser instanciada y requiere que clases que la especialicen provean
implementaciones para las operaciones abstractas. Una clase abstracta puede tener
operaciones con código funcional. Por ejemplo tenemos una superclase de ser vivo -es
decir, la clase que generaliza- que tiene el método abstracto de alimentarse, por lo que al
tener una operación abstracta la clase se vuelve abstracta, y esta superclase tiene dos
clases hijas(que especializan) planta que implementa el método de alimentarse y animal
que es superclase abstracta ya que también tiene el método alimentarse abstracto, porque
es superclase de carnívoro y herbívoro que son otras 2 clases hijas que implementan el
método de alimentarse. En ​diagrama de clases​ se vería así:

Implementado se vería así:

Java

public abstract class SerVivo {

public abstract void alimentarse(){

---

public class Planta extends SerVivo {

@Override​//Se sobreescribe otra característica de POO de la que


hablaremos adelante

public void alimentarse() {

System.out.println(“Soy planta, me alimento por fotosíntesis”);

---
public abstract class Animal extends SerVivo {

public abstract void alimentarse(){

---

public class AnimalCarnivoro extends Animal {

@Override

public void alimentarse() {

System.out.println(“Soy animal carnívoro”);

---

public class AnimalHerbivoro extends Animal {

@Override

public void alimentarse() {

System.out.println(“Soy animal herbívoro”);

Python

class SerVivo {

def alimentarse(self):

pass

---

class Planta(SerVivo):

def alimentarse(self):

print(“Soy planta, me alimento por fotosíntesis”)

---
class Animal(SerVivo):

def alimentarse(self):

pass

---

class AnimalCarnivoro(Animal):

def alimentarse():

print(“Soy animal carnívoro”)

---

class AnimalHerbivoro(Animal):

def alimentarse():

println(“Soy animal herbívoro”)

Polimorfismo:

· El concepto de polimorfismo lo explicaremos a partir del siguiente ejemplo: Suponga que


crearemos un programa que simula el movimiento de varios tipos de animales para un
estudio biológico. Las clases Pez, Rana y Ave representan los tres tipos de animales
bajo investigación. Imagine que cada una de estas clases extiende a la superclase
Animal, la cual contiene un método llamado mover y mantiene la posición actual de un
animal, en forma de coordenadas x-y. Cada subclase implementa el método mover.
Nuestro programa mantiene un arreglo de referencias a objetos de las diversas
subclases de Animal. Para simular los movimientos de los animales, el programa envía
a cada objeto el mismo mensaje una vez por segundo; a saber, mover. No obstante,
cada tipo específico de Animal responde a un mensaje mover de manera única; un Pez
podría nadar tres pies, una Rana podría saltar cinco pies y un Ave podría volar diez pies.
El programa envía el mismo mensaje (es decir, mover) a cada objeto animal en forma
genérica, pero cada objeto sabe cómo modificar sus coordenadas x-y en forma
apropiada para su tipo específico de movimiento. Confiar en que cada objeto sepa cómo
“hacer lo correcto” (es decir, lo que sea apropiado para ese tipo de objeto) en respuesta
a la llamada al mismo método es el concepto clave del polimorfismo. El mismo mensaje
(en este caso, mover) que se envía a una variedad de objetos tiene “muchas formas” de
resultados; de aquí que se utilice el término polimorfismo, este caso en especial es
conocido como​ sobre-escritura​(override); en la documentación se encuentra una
discrepancia entre los autores debido a que algunos consideran la sobre-escritura como
polimorfismo y otros no.

Vamos entonces a implementar en java la clase animal de la cual heredará la clase gato y la
clase perro. La clase animal tiene un método para hacer un sonido, pero sus clases hijas lo
implementaran de diferente manera, ya que ambos realizan sonidos diferentes.
Java

Python

class Animal:

def hacer_un_sonido(self):

print(“Grr...”)

class Gato(Animal):

def hacer_un_sonido(self):

print(“Meow”)

class Perro(Animal):

def hacer_un_sonido(self):

print(“Woof”)

Ahora vamos a analizar otro caso de polimorfismo conocido como ​sobrecarga​. Siguiendo
con el mismo ejemplo de los animales, vamos a trabajar con la clase perro, ahora
deseamos que el perro no solo haga un sonido por defecto, sino que haga diferentes
dependiendo de su ánimo, por lo que haremos una ​sobrecarga​, es decir, un método con el
mismo nombre pero con variación en los argumentos.

Java

class Perro extends Animal {

public void hacerUnSonido() {

System.out.println(“Woof”);

public void hacerUnSonido(String animo) {


if(animo == enojo){

System.out.println(“Grrr...”);

if(animo == miedo){

System.out.println(“nnnnnn”);

Python

class Perro(Animal):

def hacer_un_sonido(self):

print(“Woof”)

def hacer_un_sonido(self, animo):

if(animo == enojo):

print(“Grrr...”)

if(animo == miedo):

print(“nnnnnn”)

Bibliografía:

● ​Programación orientada a objetos con Java Escrito por Francisco Durán, Francisco Gutiérrez,
Ernesto Pimentel
● ​Java, como programar. P.J Deitel, H.M Deitel

● P​rogramac[on orientada a objetos ​Francisco Durán, Francisco Gutiérrez, Ernesto Pimente


● Programación orientada a objetos. Roberto Rodriguez Echavarria.

video recomendado: ​https://www.youtube.com/watch?v=Nka4JSBgf7I

También podría gustarte