DEFINICION DE LENGUAJE POO:
Antes de establecer
los elementos del lenguaje, es necesario tener presentes los conceptos básicos
de la programación orientada a objetos porque la sintaxis y el formato de Java
están plenamente apegados a ellos.
Para empezar, todo
parte del hecho de que el desarrollo de la programación de computadoras entró
en crisis en los años 60 y 70 del s. XX porque las aplicaciones a menudo hacían
cosas raras. Un caso es el del Centro de Cómputo Noruego en Oslo en el que
desarrollaban simuladores de vuelo; sucedía, cuando los ejecutaban, que las
naves colisionaban. Un análisis del problema probó que la aplicación confundía
las características entre uno y otro objeto simulado; es decir, que la cantidad
de combustible, la posición en el espacio o la velocidad de una nave eran atribuidas
a otra. Se concluyó que esto se debía al modo como programaban y que los
lenguajes de entonces eran incapaces de resolver el problema. Ante esto, los
expertos del Centro Noruego desarrollaron Simula 67 que fue el primer lenguaje
orientado a objetos.
Así que la POO es una manera de diseñar y desarrollar software que
trata de imitar la realidad tomando algunos conceptos esenciales de ella; el
primero de éstos es, precisamente, el de objeto, cuyos rasgos son la
identidad, el estado y el comportamiento. No
debemos dejarnos intimidar por estas expresiones, son muy simples:
·
La identidad es el nombre que distingue a un
objeto de otro.
·
El estado son las características que lo
describen.
·
El comportamiento es lo que puede hacer.
Se debe tener
presente que los objetos, sean reales o su proyección en software,
se abstraen en clases. Por ejemplo: de la clase perro pueden existir dos
objetos Fido y Firuláis (esta es su identidad). Fido es un san bernardo enorme,
pinto, de 5 años de edad; mientras que Firuláis es un labrador, negro, de 3
años (este es su estado). Ambos perros ladran, merodean, juguetean, comen y
duermen (este es su comportamiento).
Si nos pidieran que hiciéramos un programa orientado a objetos que simulara lo
anterior haríamos la clase Perro que tendría las variables raza, color y edad,
y los métodos ladrar(), merodear(), juguetear(), comer() y dormir().
Firuláis y Fido son los identificadores que podríamos usar en
una aplicación que pretenda mostrar dos objetos de la clase Perro.
FUNDAMENTOS
La POO es una técnica para desarrollar soluciones computacionales
utilizando componentes de software (objetos desoftware).
Objeto: Componente o código de software que contiene en
sí mismo tanto sus características (campos) como sus comportamientos (métodos);
se accede a través de su interfaz o signatura.
Campo: Es una característica de un objeto, que ayuda a definir su
estructura y permite diferenciarlo de otros objetos. Se define con un
identificador y un tipo, el cual indica los valores que puede almacenar. El
conjunto de valores de los campos definen el estado del objeto.
Método: Es la implementación de un algoritmo que representa una operación
o función que un objeto realiza. El conjunto de los métodos de un objeto
determinan el comportamiento del objeto.
La POO es un paradigma de la programación de computadores; esto hace
referencia al conjunto de teorías, estándares, modelos y métodos que permiten
organizar el conocimiento, proporcionando un medio bien definido para
visualizar el dominio del problema e implementar en un lenguaje de programación
la solución a ese problema.
Una ventaja de la POO frente al paradigma algorítmico es la facilidad
que brinda a través de sus herramientas, de concebir, analizar, modelar,
diseñar e implementar el mundo real de manera fiel a como se presenta en la
realidad; el paso que hay desde la concepción y asimilación del problema hasta
la implementación del mismo es un proceso que se hace de manera casi natural.
Esto porque el mundo está lleno de objetos reales, los cuales se pueden
representar como tales en una solución computarizada.
Modularidad
Proceso de crear partes de un todo que se integran perfectamente entre
sí para que funcionen por un objetivo general, y a las cuales se les pueden
agregar más componentes que se acoplen perfectamente al todo, o extraerle
componentes sin afectar su funcionamiento. En el caso que se requiera
actualizar un módulo, no hay necesidad de hacer cambios en otras partes del
todo. Un ejemplo clásico es un conjunto de módulos que, al integrarlos
conforman un armario, el cual puede agregarle más funcionalidad si se le
agregan más módulos, o al contrario. También se puede cambiar su finalidad si
se acomodan esos módulos para darle otro objetivo: volverlo una mesa.
Esto ayuda a la descomposición de problemas en subproblemas, es decir,
a la solución de problemas por composición de soluciones a subproblemas.
Reutilización
Capacidad de usar un mismo código para varias implementaciones o
necesidades (desarrollos); para esto se debe tener en cuenta:
- Polimorfismo: Esta propiedad indica
que un elemento puede tomar distintas formas. Podemos definirlo como el
uso de varios tipos en un mismo componente o función. Por ejemplo, una
función que sume dos operandos, la cual maneja, o dos números o dos
cadenas, para retornar un total de una suma o de una concatenación.
También se denomina subsumption (más delante de detalla
este concepto).
- Genericidad: Usar algoritmos
genéricos para resolver varias situaciones, como acceso a varios motores
de bases de datos de forma transparente, como el PEAR de PHP. Consiste en
parametrizar una función con varios tipos de datos donde ella misma en su
cuerpo decida cómo operar, como la ut0110.4gl.
- Operaciones
Relacionadas: Todas
las operaciones de un módulo deben estar dentro de él, como parte de su
cuerpo ...
- Caja
negra: Saber
qué entra y qué sale (la interfaz del módulo: signatura) y no cómo lo hace
(su implementación), como la co0020.4gl.
- Sobrecarga: Modalidad de herencia
que permite usar el mismo módulo para diferentes implementaciones de una
operación, es decir, usando diferente signatura: una función que pueda
recibir un parámetro, o dos, o ninguno; pero opera correctamente con
cualquiera de ellos con que se lo invoque, está sobrecargada; por ejemplo,
la función saludar(), cuando va sin parámetros retorna la cadena “Hola”,
cuando se invoque con un nombre, (saludar(var_nombre)), retorna “Hola var_nombre”,
y así sucesivamente. Esto debe manejarse por código dentro de la función.
La reutilización es la principal
característica de la POO, la cual se logra mediante:
- Encapsulación de
información: Ocultamiento de información, datos o funciones especiales a
los usuarios. En el caso de la programación, el encapsulamiento es lo que
permite que tanto la estructura (campos) como el comportamiento (métodos) se
encuentren dentro del mismo cuerpo de código de la clase con la que se crean
los objetos. Dentro de la clase se deben agrupar tanto la información o datos
de los campos como las operaciones o métodos o funciones que operan sobre esta
información
- Herencia: Propiedad
que permite a los objetos ser construidos a partir de otros; es recibir de un
módulo superior sus características, tales como atributos o funciones (campos y
métodos o comportamientos), para usarlos en el módulo actual. Heredar es
compartir atributos
- Sobre escritura ( override ): Posibilidad
de heredar un método de un módulo y cambiarle el comportamiento en el heredero,
con la opción de poder usar el original, si se desea.
- Métodos unidos a los
objetos: los métodos de un objeto son inseparables y siempre formarán
parte de su cuerpo, como un todo.
- Noción de self : unicidad
de los objetos; son únicos y no se repiten, aunque sean de la misma clase. Así
como se puede definir varias variables del tipo INT cada una de las cuales es
única, se puede crear o instanciar varios objetos de una misma clase.
Ejemplos:
Lenguajes imperativos:
- BASIC
- C
- C++
- Java
- C#
- Perl
- unerg
Híbridos:
- Lisp
- Scheme
- Ocaml
- Standard ML
- ML
- Scala
Lenguajes
orientados a objeto
- C++
- Objective C
- Java
- Smalltalk
- Eiffel
- Java
- Actionscript
- COBOL
- Perl
- C#
- Visual Basic.NET
- PHP
- Lexico (en castellano)
- Ruby
- Python
- OCAML
- Object Pascal
- CLIPS
- Visual .net
VENTAJAS
Los lenguajes orientados a objetos presentan las siguientes ventajas:
· Agiliza el desarrollo de software
· Facilita el trabajo en equipo
· Facilita el mantenimiento del software
· Fomenta la reutilización y extensión del código.
· Permite crear sistemas más complejos.
· Relacionar el sistema al mundo real.
· Facilita la creación de programas visuales.
· Construcción de prototipos
DESVENTAJAS
A pesar de que las ventajas de la programación orientada a objetos superan a
las limitaciones de la misma, podemos encontrar algunas características no
deseables en ésta.
Limitaciones para el programador. No obstante que la tecnología orientada a
objetos no es nueva, un gran porcentaje de programadores no están
familiarizados con los conceptos de dicha tecnología. En otras palabras, la
lógica de la programación estructurada sigue siendo predominante en la mayoría
de los desarrolladores de software, después de haber revisado de forma breve
los principios de la programación orientada a objetos, nos es claro que en ésta
se requiere una lógica de pensamiento totalmente diferente a la lógica
comúnmente utilizada para la programación estructurada.
Tamaño excesivo en las aplicaciones resultantes. La gran mayoría de los equipos
de cómputo cuentan con capacidades tanto de almacenamiento como de memoria lo
suficientemente buena como para ejecutar la mayoría de las aplicaciones que
puedan desarrollarse con la tecnología orientada a objetos, sin embargo existen
casos en los que lo anterior no se cumple. Una de las desventajas de la
programación orientada a objetos es que cuando se heredan clases a partir de
clases existentes se heredan de forma implícita todos los miembros de dicha
clase aun cuando no todos se necesiten, lo que produce aplicaciones muy grandes
que no siempre encajan en los sistemas con los que se disponga.