Introducción al paradigma de objetos
*Aquí les voy a ir compartiendo conocimientos que fui adquiriendo mediante estudios y tambien gracias a este gran foro. De esta manera,con aproximadamente 10 capitulos por unidad iré compartiendo sobre POO con Java y desarrollo de software entre otras cosas.
Capitulo 1
Objetivos:
- Comprender qué es un paradigma de programación.
Describir las características básicas del paradigma de programación orientada a objetos.
Conocer las características básicas de una clase y sus componentes.
¿Qué es un paradigma de programación?
En el módulo Técnicas de Programación te presentamos a la programación estructurada, en donde se definen funciones y procedimientos. En este módulo nos dedicaremos al estudio de la Programación Orientada a Objetos (POO).
Definición de Paradigma de programación
Podemos definir a un paradigma de programación como un enfoque particular o criterio para la creación de software.
Hay diferentes paradigmas de programación, que determinan distintos estilos de programación y diferentes formas de resolver un problema.
Para mostrar más claro los diferentes enfoques de los paradigmas, te presentamos un mismo ejemplo abordado desde ambos paradigmas.
Supongamos que tenemos que guardar el nombre y la edad de un alumno. Ingresamos todos los datos por teclado y luego mostramos el nombre si la persona es mayor de edad.
PARADIGMA ESTRUCTURADO
[i]SEUDOCÓDIGO[/i]
TIPOS
T_REG_PERSONA = REGISTRO
NOMBRE : CADENA
EDAD : ENTERO
FINREGISTRO
VARIABLES
ALUMNO : T_REG_PERSONA
INICIO
ObtenerPersona (ALUMNO)
Si EsMayor (ALUMNO) entonces
Mostrar (GetNombre(ALUMNO), “ es mayor de edad”)
Finsi
FIN
PROCEDIMIENTO ObtenerPersona (ref P : T_REG_PERSONA)
INICIO
Mostrar (“Ingrese nombre”)
Ingresar (P.NOMBRE)
Repetir
Mostrar (“Ingrese edad”)
Ingresar (P.EDAD)
Hasta que P.EDAD > 0
FINPROCEDIMIENTO
FUNCIÓN EsMayor (ref P : T_REG_PERSONA) : Boolean
VARIABLES
ES : BOOLEAN
INICIO
ES <- FALSO
Si P.EDAD > 18 entonces
ES <- VERDADERO
Finsi
Devolver ES
FINFUNCIÓN
FUNCIÓN GetNombre (ref P : T_REG_PERSONA) : Boolean
INICIO
Devolver P.NOMBRE
FINFUNCIÓN
[u][b]PARADIGMA ORIENTADO A OBJETOS[/b][/u]
[i]SEUDOCÓDIGO[/i]
CLASE Persona
Atributos
NOMBRE : CADENA
EDAD : ENTERO
Métodos
Obtener ()
EsMayor():BOOLEAN
GetNombre():CADENA
Implementación
PROCEDIMIENTO Obtener ()
INICIO
Mostrar (“Ingrese nombre”)
Ingresar (NOMBRE)
Repetir
Mostrar (“Ingrese edad”)
Ingresar (EDAD)
Hasta que EDAD > 0
FIN
FUNCIÓN EsMayor (): Boolean
VARIABLES
ES : BOOLEAN
INICIO
ES <- FALSO
Si EDAD > 18 entonces
ES <- VERDADERO
Finsi
Devolver ES
FINFUNCIÓN
FUNCIÓN GetNombre (): Boolean
INICIO
Devolver NOMBRE
FINFUNCIÓN
FINCLASE
INICIO
Alumno = nuevo Persona()
Alumno.obtener()
Si Alumno.EsMayor() entonces
Mostrar (Alumno.GetNombre(), “ es mayor de edad”)
Finsi
FIN
Analicemos a continuación cada uno de los paradigmas.....
En la versión
estructurada, se realiza la definición de los datos, por medio de un registro y sus campos. Luego, se definen funciones y procedimientos que reciben al registro como parámetro para poder realizar su tarea. Es decir, que se definen los datos y su comportamiento de manera separada. Es por eso que hay que enviar los datos por parámetro. Si alguna definición de datos cambia, deberemos cambiar las rutinas definidas en el programa.
En cambio, en la versión de
Objetos, habrás notado que hay algo nuevo. Hay una clase que contiene atributos y métodos. Es decir que, en este mismo componente, en la clase, vamos a tener los datos y la forma en que se manipulan esos datos. Luego, en el programa principal, se crea un objeto en base a una clase. También habrás notado que no hay llamadas a rutinas, sino que hay invocaciones a los métodos definidos en la clase Persona utilizando el objeto ALUMNO. Es decir que creamos un Objeto a partir de una clase y luego usamos el objeto para llamar a los métodos. En el mismo objeto se encuentran los datos y sus comportamientos, de tal manera que, ante un cambio en los datos, no se deberá cambiar nada del programa principal, sino que los cambios deberán realizarse solamente en la clase.
A partir de estas deferencias, entonces veamos qué es el paradigma de la Programación Orientada a Objetos y luego las diferencias que hay con la programación estructurada.
La Programación Orientada a Objetos (POO u OOP según sus siglas en inglés) define los programas por medio de “clases de objetos”. Los objetos, por lo tanto, son el elemento fundamental del programa, ya que son entidades que combinan:
Estado: Los datos de los programas.
Comportamiento: Las acciones que pueden hacer los objetos.
Identidad: Un objeto que lo diferencia de los demás objetos del programa.
Así, la programación orientada a objetos define un programa como un conjunto de estos objetos, que colaboran entre ellos para realizar tareas. Como consecuencia, los programas y módulos te serán más fáciles de escribir, mantener y reutilizar.
Veamos a continuación la definición de Objeto y de Clase.....
ObjetosAntes de ver la definición de objeto, te pedimos que te tomes un momento para observar los objetos que hay a tu alrededor, por ejemplo, una mesa, una silla, tu perro, cualquier elemento.
Podrás notar que a cada objeto se le puede asociar un conjunto de características, por ejemplo: color, peso, dimensiones, raza, etc. También, cada objeto tendrá un comportamiento: el perro ladra, camina, salta, etc. Así, cada objeto tendrá sus propias características y comportamiento.
Esta misma idea es la de Objetos en la POO.
Un Objeto es un elemento que posee características, denominadas atributos, y comportamientos, denominados métodos, que puede interactuar con otros objetos del sistema, enviando mensajes, y tiene asociado una identidad que lo distingue entre todos los objetos del sistema.
ClasesVolvamos a los casos de los objetos de la vida real y tomemos el ejemplo de un perro.
Nosotros sabemos qué es un perro porque conocemos la idea de un perro. Todos los perros presentan las características y tienen el mismo comportamiento. Ahora bien, cada perro en particular se diferencia porque tiene diferentes atributos, por ejemplo, son de distinta raza, de distinto tamaño, de distinto peso, etc. Por lo tanto, la idea de un perro es el equivalente a una Clase.
Podemos ver a una clase como un modelo o plantilla que representa entidades o conceptos.
En una clase se definen los datos y el comportamiento que tendrá la entidad que representa. Los datos se denominan atributos, mientras que el comportamiento está definido por funciones y procedimientos que se denominan métodos. Una clase se utiliza para crear objetos, es por eso que también se dice que un objeto es una instancia de una clase.
Una clase es un modelo abstracto que define cómo será un objeto real.
Origenes de la POO
La programación orientada a objetos tomó posición como el estilo de programación dominante a mediados de los años ochenta, en gran parte debido a la influencia de C++ , una extensión del lenguaje de programación C. Su dominación fue consolidada gracias al auge de las Interfaces gráficas de usuario, para los cuales la programación orientada a objetos está particularmente bien adaptada. En este caso, se habla también de programación dirigida por eventos, también conocida como programación visual.
Las características de orientación a objetos fueron agregadas a muchos lenguajes existentes durante ese tiempo, incluyendo Ada, BASIC, Lisp, Pascal, y otros.
El agregado de estas características a los lenguajes que no fueron diseñados inicialmente para ellas condujo a menudo a problemas de compatibilidad y a la capacidad de mantenimiento del código. Los lenguajes orientados a objetos "puros", por otra parte, carecían de las características que los programadores estaban acostumbrados a utilizar, por ejemplo definiciones de variables globales y un uso excesivo de funciones y procedimientos poco reutilizables.
Para saltar este obstáculo, se hicieron muchas tentativas para crear nuevos lenguajes basados en métodos orientados a objetos, pero permitiendo algunas características imperativas de maneras "seguras".
El Eiffel de Bertrand Meyer fue un temprano y moderadamente acertado lenguaje con esos objetivos, pero luego fue reemplazado por Java, en gran parte debido a la aparición de Internet y a la implementación de la máquina virtual de Java en la mayoría de los navegadores.
¿Cuáles son las diferencias de la POO con el paradigma estructurado?
La principal diferencia con la programación estructurada tradicional es que ahora deberás pensar simultáneamente en el conjunto de atributos que tendrá una clase y en los métodos para poder tratarlos. Es decir, que los datos son tan importantes como su comportamiento y deben ir íntimamente entrelazados.
En cambio, en el paradigma estructurado, los datos y los procedimientos están separados y sin relación, ya que lo único que se busca es el procesamiento de unos datos de entrada para obtener otros de salida.
Cuando programás de forma estructurada, lo que hacés es pensar sobre todo en términos de procedimientos o funciones, y en segundo lugar en las estructuras de datos que esas rutinas manejan. En la programación estructurada se escriben funciones y después se les pasan datos. Ahora, cuando programes con objetos, definirás los objetos con sus datos y sus métodos relacionados.
Conceptos básicos de la POO
Como habrás notado, la POO es una nueva forma de programar que trata de encontrar soluciones a los problemas de la programación clásica estructurada.
Es por eso que la POO introduce nuevos conceptos, que superan y amplían conceptos antiguos ya conocidos. Entre ellos se destacan los siguientes:
OBJETO Es una entidad provista de un conjunto de atributos (datos) y de comportamiento (métodos). Los objetos se corresponden a los objetos reales del mundo que nos rodea, o a objetos internos del sistema (del programa).
CLASEEs el modelo en el que se definen las propiedades y comportamiento de un tipo de objeto.
METODOAlgoritmo asociado a un objeto (o a una clase de objetos), cuya ejecución se desencadena tras la recepción de un "mensaje". Desde el punto de vista del comportamiento, es lo que el objeto puede hacer. Un método puede producir un cambio en las propiedades del objeto, o la generación de un "evento" con un nuevo mensaje para otro objeto del sistema.
EVENTOEs un suceso en el sistema (tal como una interacción del usuario con la máquina, o un mensaje enviado por un objeto). El sistema maneja el evento enviando el mensaje adecuado al objeto pertinente. También se puede definir como evento a la reacción que puede desencadenar un objeto, es decir, la acción que genera.
MENSAJEUna comunicación dirigida a un objeto que le ordena que ejecute uno de sus métodos con ciertos parámetros asociados al evento que lo generó.
PROPIEDAD O ATRIBUTO
Contenedor de un tipo de datos asociados a un objeto (o a una clase de objetos), que hace los datos visibles desde fuera del objeto, y cuyo valor puede ser alterado por la ejecución de algún método.
ESTADO INTERNO
Es una propiedad invisible de los objetos, que puede ser únicamente accedida y alterada por un método del objeto, y que se utiliza para indicar distintas situaciones posibles para el objeto (o clase de objetos).
COMPONENTE DE UN OBJETO
Atributos, identidad, relaciones y métodos.
REPRESENTACIÓN DE OBJETOS
Un objeto se representa por medio de una tabla o entidad que esté compuesta por sus atributos y funciones correspondientes.
Eso es todo por hoy, próximamente el capitulo 2.
MonkeyBoy