Prog. Fundamentos Programación Orientada a Objetos (POO)

De MediaWiki
Ir a la navegación Ir a la búsqueda

Introducción

  • Antes del paradigma de la POO se utilizaba la programación estructurada.
Este tipo de programación se basa en un diseño descendente (metodología top-down) y se utilizan para implementar los programas tres estructuras básicas: secuencial-condicional-repetitiva.
El programa consistía normalmente en un único archivo donde se encontraba todo el código fuente que daba una solución informática al problema del mundo real, en el que los datos se declaraban a nivel 'global' y definimos un conjunto de funciones, el que se trataban dichos datos y se informaba al usuario.
Este es un tipo de programación orientado al tratamiento de datos, a los procedimientos.
Cuando diseñas un programa utilizando este tipo de metodología piensas en las operaciones y partiendo de ellas, diseñas el programa.
Por ejemplo, si quiero dar una solución informática a la gestión de un centro de enseñanza, podría pensar (metodología top-down):
  • Necesito una gestión de los alumnos del centro.
  • Necesito una gestión de los profesores del centro.
  • Dentro de la gestión de alumnos tendré:
  • Alta => función que pida los datos y los añada
  • Baja => función que pida un identificador y de baja
  • Modificación => función que pida los datos y los modifique
  • Consulta => función que busque datos en base a diferentes criterios.
  • Dentro de la gestión de profesores tendré:
  • Alta => función que pida los datos y los añada
  • Baja => función que pida un identificador y de baja
  • Modificación => función que pida los datos y los modifique
  • Consulta => función que busque datos en base a diferentes criterios.


Los datos estarán definidos a nivel global, utilizando una estructura adecuada para guardarlos, como los arrays.



  • En el paradigma de la POO, el diseño se realiza en base a los datos y utilizando un concepto mucho más 'humano' como es el de objeto.
Un objeto es cualquier cosa que puedas identificar en el mundo real o que puedas a llegar a identificar utilizando la abstracción.
Ejemplo de objetos:
  • Un coche Opel negro matrícula 1234-ABC
  • Una matriz matemática
  • Un globo de color verde que lleva un niño
  • El ordenador con el que estás trabajando
En la POO cada de las características que posee un objeto se denomina atributo (en la Prog. Estructurada se llaman variables).
Todos los objetos 'coches' tienen un conjunto de atributos comunes (matrícula, km recorridos, color,....) por lo que en programación, para poder crear esos objetos utilizamos otro concepto denominado clase.
Una clase define todos los atributos que van a tener los objetos, pero no sus valores, sino los tipos y nombres de los atributos.
Así puedo definir:
  • Una clase Coche que tenga los atributos 'matrícula', 'km', 'color', 'estado'
  • Una clase Matriz que tenga los atributos 'fila','columna'
  • Una clase Globo, que tenga los atributos 'color','tamaño'
  • Una clase Computador que tenga los atributos 'cpu','hd','memoria','velocidadActual'


En una clase, a parte de definir los atributos, también se definen las funciones (métodos en la POO) que se pueden aplicar a los datos definidos en esa clase.
Por ejemplo:
  • La clase Globo puede tener un método 'hinchar' y otro 'deshinchar' que modificará el valor del atributo 'tamaño'.
  • La clase Coche puede tener un método 'recorrer' que modifique el valor del atributo 'km', un método 'arranca','parar','acelerar','frenar' que cambie el atributo 'estado'.
  • La clase Matriz puede tener un método 'sumar' para que modifique el valor del atributo 'matriz'.
  • La clase Computador puede tener un método 'cambiarVelocidad' que modifique el valor del atributo 'velocidadActual'.


En el ejemplo anterior de un centro de enseñanza, si aplicamos esta metodología tendríamos:
  • Una clase 'Alumno' que representaría cada uno de los alumnos
  • Con un método 'crear' que guardaría los datos de un nuevo alumno.
  • Con un método 'modificar' que modificaría los datos de un alumno.
  • El método 'eliminar' no sería necesario en esta clase ya que cuando un objeto no se utiliza, Java lo elimina con el proceso 'garbage collection'.
  • Una clase 'Profesor' que representaría cada uno de los profesores.
  • Con un método 'crear' que guardaría los datos de un nuevo profesor.
  • Con un método 'modificar' que modificaría los datos de un profesor.
  • El método 'eliminar' no sería necesario en esta clase ya que cuando un objeto no se utiliza, Java lo elimina con el proceso 'garbage collection'.
  • Una clase Centro que representaría el centro donde trabajan y estudian los alumnos y profesores.
Dentro de esta clase definiríamos:
  • Un atributo que guardaría un array de 'objetos Alumnos' que representa todos los alumnos del centro.
  • Un atributo que guardaría un array de 'objetos Profesores' que representa todos los profesores del centro.
  • Un método 'crearAlumno' que crearía un nuevo objeto Alumno (llamando al método crear) y lo añadiría al array de Alumnos.
  • Un método 'crearProfesor' que crearía un nuevo objeto Profesor (llamando al método crear) y lo añadiría al array de Profesores.
  • Un método 'eliminarAlumno' que borraría un objeto Alumno del array de Alumnos.
  • Un método 'eliminarProfesor' que borraría un objeto Profesor del array de Profesores.
  • Un método 'modificarAlumno' que en base a un identificador (por ejemplo el nif) buscaría el objeto alumno dentro del array de Alumnos y llamaría al método 'modificar' de ese objeto.
  • Un método 'modificarProfesor' que en base a un identificador (por ejemplo el nif) buscaría el objeto profesor dentro del array de Profesores y llamaría al método 'modificar' de ese objeto.
  • Un método 'listarAlumnos' que en base a un criterio (nombre, nif,...) recorra el array de Alumnos, mostrando aquellos objetos cuyo criterio coincida con los valores guardados en cada uno de los objetos.




Clases


-- Ángel D. Fernández González -- (2017).