FUNDAMENTOS DE LA POO.
Técnica
que desarrolla soluciones computacionales utilizando elementos de software
(objetos de software).
Objeto: Elemento
de software que contiene sus características (campo) y sus comportamientos
(métodos), a través de señales comprensibles para quien las utiliza.
OBJETO =
ESTADO + COMPORTAMIENTO +IDENTIDAD
Campo: Es
una propiedad de un objeto que facilita su estructura y permite distinguirlo de
otro objeto. El conjunto de las características de sus campos define la condición
del objeto.
Método: Es
la herramienta de un algoritmo que simboliza la función que un objeto realiza.
El grupo de los métodos de un objeto definen la conducta o comportamiento del
objeto.
Clase. Es un entorno que
permite crear objetos semejantes; es decir con las mismas características. Representa
un grupo de objetos que comparten una misma estructura y un mismo
comportamiento; como quien dice, una clase representa un grupo de objetos con
los mismos atributos y los mismos métodos. Ésta definirá datos, métodos y el
mecanismo de encapsulación correspondiente (interfaz de la clase) que se puede dividir en tres partes según su visión.
Cada usuario podrá tener acceso a una
parte de la clase o a la clase
completa de acuerdo con las
características de la llamada interfaz de clase.
Parte pública: Define qué parte de la
clase será accesible a todos los posibles usuarios.
Parte protegida: Define qué parte será accesible sólo desde la clase y de otras
clases definidas a partir de ella (derivadas o subclases).
Parte privada: Define qué parte es accesible únicamente desde la clase.
Este medio o modo de encapsulación, permite enlazar el código que
manipula los datos con los propios datos, resguardándolos de interferencias
externas y del mal uso.
El estado de un objeto
corresponde, frecuentemente, a la
parte privada de un objeto y los métodos
a la parte pública.
Gráficamente puede representarse un objeto:
Los diagramas estructurales representan la
parte estática de un sistema. Un diagrama es sólo una proyección gráfica de los
elementos que configuran un sistema.
Construcción
de una clase
La
definición de una clase es sintácticamente similar a una estructura (struct).
La Poo fue creada para
que el trabajo que realizan los programadores pudiera ser utilizado por otras
personas. La cual es una serie de normas, de realizar las cosas de manera que
otras personas puedan utilizarlas y adelantar su trabajo, para que consigamos
que el código se pueda reutilizar. No es difícil, pero tiene una manera diferente
de realizarse, en ocasiones es subjetiva de quien la programa, de manera que la
forma de hacer las cosas puede ser diferente según el programador. Se pueden
hacer los programas de formas distintas, y no todos ellos son correctos, lo
difícil no es programar orientado a objetos sino programar bien. Programar bien
es importante porque así nos podemos aprovechar de todas las ventajas de la
POO.
Pensar en términos de
objetos es como si pensáramos de cómo lo haríamos en la vida real, por ejemplo
veamos como representaríamos en modelo POO una fracción, estructura matemática
que tiene un numerador y un denominador que divide al numerador, por ejemplo
5/4.
La fracción es el objeto la cual tiene dos
propiedades que son el numerador y el denominador, a la cual podríamos darle
varios métodos para que se pueda simplificar, sería sumarse con otra fracción o
número, restarse con otra fracción, etc.
Características:
Abstracción.- Selecciona
las características sobresalientes dentro de un grupo, reconoce conductas
comunes para definir nuevos valores en el mundo real. Es clave en el proceso de
análisis y diseño orientado a objetos, pues por medio de la Abstracción se puede llegar a formar un
grupo de clases que permitan crear el objetivo que se quiere realizar.
Herencia.- Es
una relación entre clases en la cual se comparte la estructura y comportamiento
definido en otra clase.
Lo que cada clase
hereda son los atributos de la clase base además de sus propios atributos. Una
subclase es heredada por la clase base. La herencia es una de las
características que más se hace notar a la hora de crear códigos, o re-emplear
código de otros programadores
Encapsulamiento: Que las propiedades particulares de un objeto no deben de ser
visibles desde otros objetos.
Se deben de
manifestar como reservados.
Polimorfismo: Estilos
diferentes, asociados a objetos distintos, pueden llevar el mismo nombre, al
llamarlos por ese nombre se utilizará el comportamiento correspondiente al
objeto que se esté usando. Es decir, las referencias y las colecciones de
objetos pueden contener objetos de diferentes tipos, y la invocación de un
comportamiento en una referencia producirá el comportamiento correcto para el
tipo real del objeto referenciado. Cuando esto ocurre en “tiempo de ejecución”,
esta última característica se llama asignación tardía o asignación dinámica.
Como en todo existen ventajas y desventajas,
veamos pues algunas de las ventajas más notables de la programación orientada a
objetos:
Reusabilidad. Si
las clases están realizadas lógicamente bien, pueden ser utilizadas en diferentes
partes del programa y en muchos otros proyectos diferentes.
Mantenibilidad. Debido a la sencillez para concentrar el problema, los programas
orientados a objetos son más fáciles de leer y entender, pues nos posibilita
esconder detalles de implementación dejando visibles sólo aquellos detalles más
sobresalientes.
Modificabilidad. La facilidad de añadir, suprimir o cambiar nuevos objetos, nos
permite hacer cambios de una forma muy sencilla.
Fiabilidad. Al
dividir el problema en partes más pequeñas podemos probarlas de manera
independiente y aislar mucho más fácilmente los posibles errores que puedan
surgir.
Y como
mencionamos antes nombraremos algunas de las desventajas:
·
Variación
en la forma de pensar de la programación tradicional a la orientada a objetos.
·
La
ejecución de programas orientados a objetos es más lenta.
·
La
necesidad de utilizar bibliotecas de clases obliga a su aprendizaje y
entrenamiento.
Lenguajes
de Programación Orientado a objetos
En 1985, E. Stroustrup extendió el lenguaje de
programación C a C++, es decir C con conceptos de clases y objetos, también por
esas fechas se creo desde sus bases el lenguaje EIFFEL.
En 1995 apareció el más reciente lenguaje OO,
Java desarrollado por SUN, que hereda conceptos de C++.
El lenguaje de desarrollo más extendido para
aplicaciones Web, el PHP 5, trae todas las características necesarias para
desarrollar software orientado a objetos.
Además de otros lenguajes que fueron
evolucionando, como el Pascal a Delphi.
Finalmente también otros lenguajes script como
el ActionScript que si bien no es totalmente orientado a objetos pero sí posee
las características.
Análisis
y diseño Orientado a objetos
Para el desarrollo de software orientado a
objetos no basta usar un lenguaje orientado a objetos. También se necesitará
realizar un análisis y diseño orientado a objetos.
El modelamiento visual es la clave para
realizar el análisis OO. Desde los inicios del desarrollo de software OO han
existido diferentes metodologías para hacer esto del modelamiento, pero sin
lugar a duda, el Lenguaje de Modelamiento Unificado (UML)
puso fin a la guerra de metodologías.
Según los mismos diseñadores del lenguaje UML,
éste tiene como fin modelar cualquier tipo de sistemas (no solamente de
software) usando los conceptos de la orientación a objetos. Y además, este
lenguaje debe ser entendible para los humanos y máquinas.
Actualmente en la industria del desarrollo de
software tenemos al UML como un estándar para el modelamiento de sistemas OO.
Fue la empresa Racional que creó estas definiciones y especificaciones del
estándar UML, y lo abrió al mercado. La misma empresa creó uno de los programas
más conocidos hoy en día para este fin; el Racional Rose, pero también existen
otros programas como el Poseidon que trae licencias del tipo community edition
que permiten su uso libremente.
El UML consta de todos los elementos y
diagramas que permiten modelar los sistemas en base al paradigma orientado a
objetos. Los modelos orientados a objetos cuando se construyen en forma
correcta, son fáciles de comunicar, cambiar, expandir, validar y verificar.
Este modelamiento en UML es flexible al cambio y permite crear componentes
plenamente reutilizables.
El
lenguaje que permite trabajar con POO es también Java.
Existen varios
medios para aprender a programar en POO uno de ello podría ser:
http://www.ciberaula.com/articulo/tecnologia_orientada_objetos/, http://docs.oracle.com/javase/tutorial
Además de diversos libros como:
·
S.
Dean, J., H. Dean, R. (2009). Introducción a la programación con Java, Cd.
México: McGraw-Hill.
·
Deitel,
P., Deitel, H. (9na ed.). (2012). Como programar en Java. Cd. México: McGraw-Hill
·
Camacho,
D. (2003). Programación, Algoritmos y Ejercicios Resueltos en Java. Cd. México:
Pearson / Prentice-Hall
·
Ceballos,
F. J. (2011). Java 2 - Curso de Programación, Cd. México: Alfaomega, Ra-Ma.
·
McLaughlin,
B., Pollica, G. (2007). Head first Object-Orinted analysis and design; From
Concepts to Code, C.A.: O’reilly.