Introduccion a la programacion orientada a objetos

9
PROGRAMACION ORIENTADA A OBJETOS II CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS FABIAN DORADO CARVAJAL SIMEON CARDENAS ING. PEDRO ALVAREZ INSTITUCION UNIVERSITARIA COLEGIO MAYOR DEL CAUCA FACULTAD DE INGENIERIA TECNOLOGIA EN DESARROLLO DE SOFTWARE POPAYAN 2013

description

conceptualizacion

Transcript of Introduccion a la programacion orientada a objetos

Page 1: Introduccion a la programacion orientada a objetos

PROGRAMACION ORIENTADA A OBJETOS II

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS

FABIAN DORADO CARVAJAL

SIMEON CARDENAS

ING. PEDRO ALVAREZ

INSTITUCION UNIVERSITARIA COLEGIO MAYOR DEL CAUCA

FACULTAD DE INGENIERIA

TECNOLOGIA EN DESARROLLO DE SOFTWARE

POPAYAN

2013

Page 2: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 2

PROGRAMACION ORIENTADA A OBJETOS

La orientación a objetos es un paradigma de programación que facilita la creación de software de calidad por sus factores que potencian el mantenimiento, la extensión y la reutilización del software generado bajo este paradigma.

La programación orientada a objetos trata de amoldarse al modo de pensar del hombre y no al de la máquina. Esto es posible gracias a la forma racional con la que se manejan las abstracciones que representan las entidades del dominio del problema, y a propiedades como la jerarquía o el encapsulamiento.

El elemento básico de este paradigma no es la función (elemento básico de la programación estructurada), sino un ente denominado objeto. Un objeto es la representación de un concepto para un programa, y contiene toda la información necesaria para abstraer dicho concepto: los datos que describen su estado y las operaciones que pueden modificar dicho estado, y determinan las capacidades del objeto.

Java incorpora el uso de la orientación a objetos como uno de los pilares básicos de su lenguaje

TIPO DE DATO ABSTRACTO (TDA)

Con mucha frecuencia se utilizan los términos TDA y Abstracción de Datos de manera

equivalente, y esto es debido a la similitud e interdependencia de ambos. Sin embargo, es

importante definir por separado los dos conceptos.

Los Lenguajes de Programación Orientados a Objetos son lenguajes formados por

diferentes métodos o funciones y que son llamados en el orden en que el programa lo

requiere, o el usuario lo desea. La abstracción de datos consiste en ocultar las

características de un objeto y obviarlas, de manera que solamente utilizamos el nombre

del objeto en nuestro programa. Esto es similar a una situación de la vida cotidiana.

Cuando yo digo la palabra “perro”, usted no necesita que yo le diga lo que hace el perro.

Usted ya sabe la forma que tiene un perro y también sabe que los perros ladran. De

manera que yo abstraigo todas las características de todos los perros en un solo término,

al cual llamo “perro”. A esto se le llama ‘Abstracción’ y es un concepto muy útil en la

programación, ya que un usuario no necesita mencionar todas las características y

funciones de un objeto cada vez que éste se utiliza, sino que son declaradas por

separado en el programa y simplemente se utiliza el término abstracto (“perro”) para

mencionarlo.

En el ejemplo anterior, “perro” es un Tipo de Dato Abstracto y todo el proceso de definirlo,

implementarlo y mencionarlo es a lo que llamamos Abstracción de Datos.

Vamos a poner un ejemplo real de la programación. Supongamos que en algún Lenguaje

de Programación Orientado a Objetos un pequeño programa saca el área de un

rectángulo de las dimensiones que un usuario decida. Pensemos también que el usuario

probablemente quiera saber el área de varios rectángulos. Sería muy tedioso para el

programador definir la multiplicación de ‘base’ por ‘altura’ varias veces en el programa,

Page 3: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 3

además que limitaría al usuario a sacar un número determinado de áreas. Por ello, el

programador puede crear una función denominada ‘Área’, la cual va a ser llamada el

número de veces que sean necesitadas por el usuario y así el programador se evita

mucho trabajo, el programa resulta más rápido, más eficiente y de menor longitud. Para

lograr esto, se crea el método Área de una manera separada de la interfaz gráfica

presentada al usuario y se estipula ahí la operación a realizar, devolviendo el valor de la

multiplicación. En el método principal solamente se llama a la función Área y el programa

hace el resto.

Al hecho de guardar todas las características y habilidades de un objeto por separado se

le llama Encapsulamiento y es también un concepto importante para entender la

estructuración de datos. Es frecuente que el Encapsulamiento sea usado como un

sinónimo del Ocultación de información, aunque algunos creen que no es así.

VENTAJAS DE USO:

-Reusabilidad (mecanismos de abstracción y herencia)

-En programación convencional: uso de funciones y procedimiento

-Adecuación a entornos de bases de datos.

-Idónea para tratamiento de Interfaces de Usuario.

- Adecuada en prototipos y simulación.

-Construcción de sistemas complejos a partir de componentes.

-Modelado más fiel del mundo real.

-Estimación de reducción de 40% con respecto la programación convencional

Otras Ventajas de POO

-Mejor mantenimiento.

-Estructuras más reales de la información.

-Escalabilidad.

-Adaptabilidad.

-Más apropiada para aplicaciones dirigidas por eventos.

INCONVENIENTES DE POO

-Necesidades de estandarización: Notación de Modelado ( , j (OMG, Object Management

Group).Lenguajes de Programación.

-Coste de conversión de software legado

Page 4: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 4

CLASE

El elemento básico de la programación orientada a objetos en Java es la clase. Una clase

define la forma y comportamiento de un objeto. Para crear una clase sólo se necesita un

archivo fuente que contenga la palabra clave reservada class seguida de un identificador

legal y un bloque delimitado por dos llaves para el cuerpo de la clase. class MiPunto. {}

Un archivo de Java debe tener el mismo nombre que la clase que contiene, y se les suele

asignar la extensión ".java". Por ejemplo la clase MiPunto se guardaría en un fichero que

se llamase MiPunto.java. Hay que tener presente que en Java se diferencia entre

mayúsculas y minúsculas; el nombre de la clase y el de archivo fuente han de ser

exactamente iguales.

Aunque la clase MiPunto es sintácticamente correcta, es lo que se viene a llamar una clase vacía, es decir, una clase que no hace nada. Las clases típicas de Java incluirán variables y métodos de instancia. Los programas en Java completos constarán por lo general de varias clases de Java en distintos archivos fuente.

Una clase es una plantilla para un objeto. Por lo tanto define la estructura de un objeto y su interfaz funcional, en forma de métodos. Cuando se ejecuta un programa en Java, el sistema utiliza definiciones de clase para crear instancias de las clases, que son los objetos reales. Los términos instancia y objeto se utilizan de manera indistinta. La forma general de una definición de clase es:

class Nombre_De_Clase {

tipo_de_variable nombre_de_atributo1;

tipo_de_variable nombre_de_atributo2;

// . . .

tipo_devuelto nombre_de_método1( lista_de_parámetros ) {

cuerpo_del_método1;

}

Page 5: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 5

tipo_devuelto nombre_de_método2( lista_de_parámetros ) {

cuerpo_del_método2;

}

// . . .

}

Los tipos tipo_de_variable y tipo_devuelto, han de ser tipos simples Java o nombres de otras clases ya definidas. Tanto Nombre_De_Clase, como los nombre_de_atributo y nombre_de_método, han de ser identificadores Java válidos.

OBJETOS

En el paradigma de programación orientada a objetos (POO, o bien OOP en inglés),

un objeto se define como la unidad que en tiempo de ejecución realiza las tareas de

un programa. También a un nivel más básico se define como la instancia de una clase.

Estos objetos interactúan unos con otros, en contraposición a la visión tradicional en la

cual un programa es una colección de subrutinas (funciones o procedimientos), o

simplemente una lista de instrucciones para el computador. Cada objeto es capaz de

recibir mensajes, procesar datos y enviar mensajes a otros objetos de manera similar a

un servicio.

En el mundo de la programación orientada a objetos (POO), un objeto es el resultado de

la instanciación de una clase. Una clase es el anteproyecto que ofrece la funcionalidad en

ella definida, pero ésta queda implementada sólo al crear una instancia de la clase, en la

forma de un objeto. Por ejemplo: dado un plano para construir sillas (una clase de

nombre clase_silla), entonces una silla concreta, en la que podemos sentarnos,

construida a partir de este plano, sería un objeto de clase_silla. Es posible crear

(construir) múltiples objetos (sillas) utilizando la definición de la clase (plano) anterior. Los

conceptos de clase y objetos son análogos a los de tipo de datos y variable; es decir,

definida una clase podemos crear objetos de esa clase, igual que disponiendo de un

Page 6: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 6

determinado tipo de dato (por ejemplo el tipo entero), podemos definir variables de dicho

tipo:

int a,b;

( 'int' es un tipo de dato y 'a' y 'b' son variables de tipo entero con las que podemos

operar)

Para utilizar la funcionalidad definida en una clase en particular (salvo en las clases

abstractas), primeramente es necesario crear un objeto de esa clase. De la misma

manera, para una persona que desea sentarse, las especificaciones para construir

una silla serán de poca utilidad; lo que se necesita es una silla real construida a partir

de esas especificaciones. Siguiendo con la analogía anterior, también se puede decir

que para hacer operaciones aritméticas, de nada sirve por sí solo el tipo entero (int);

para ello necesitamos variables (o constantes) con las que operar.

LOS ATRIBUTOS

Los datos se encapsulan dentro de una clase declarando variables dentro de las llaves de apertura y cierre de la declaración de la clase, variables que se conocen como atributos. Se declaran igual que las variables locales de un método en concreto.

Por ejemplo, este es un programa que declara una clase MiPunto, con dos atributos enteros llamados x e y.

class MiPunto {

int x, y;

}

Los atributos se pueden declarar con dos clases de tipos: un tipo simple Java (ya descritos), o el nombre de una clase (será una referencia a objeto, véase el punto C.a de este mismo apartado).

Cuando se realiza una instancia de una clase (creación de un objeto) se reservará en la memoria un espacio para un conjunto de datos como el que definen los atributos de una clase. A este conjunto de variables se le denomina variables de instancia.

Page 7: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 7

METODOS

En la programación orientada a objetos, un método es una subrutina asociada

exclusivamente a una clase (llamados métodos de clase o métodos estáticos) o a

un objeto (llamados métodos de instancia). Análogamente a los procedimientos en

los lenguajes imperativos, un método consiste generalmente de una serie de sentencias

para llevar a cabo una acción, un juego de parámetros de entrada que regularán dicha

acción y o, posiblemente, un valor de salida (o valor de retorno) de algún tipo.

Algunos lenguajes de programación asumen que un método debe de mantener

el invariante del objeto al que está asociado asumiendo también que éste es válido

cuando el método es invocado. En lenguajes compilados dinámicamente, los métodos

pueden ser objetos de primera clase, y en este caso se puede compilar un método sin

asociarse a ninguna clase en particular, y luego asociar el vínculo o contrato entre el

objeto y el método en tiempo de ejecución. En cambio en lenguajes no compilados

dinámicamente o tipados estáticamente, se acude a precondiciones para regular los

parámetros del método y postcondiciones para regular su salida (en caso de tenerla). Si

alguna de las precondiciones o postcondiciones es falsa el método genera una excepción.

Si el estado del objeto no satisface la invariante de su clase al comenzar o finalizar un

método, se considera que el programa tiene un error de programación.

La diferencia entre un procedimiento (generalmente llamado función si devuelve un valor)

y un método es que éste último, al estar asociado con un objeto o clase en particular,

puede acceder y modificar los datos privados del objeto correspondiente de forma tal que

sea consistente con el comportamiento deseado para el mismo. Así, es recomendable

entender a un método no como una secuencia de instrucciones sino como la forma en

que el objeto es útil (el método para hacer su trabajo). Por lo tanto, podemos considerar al

método como el pedido a un objeto para que realice una tarea determinada o como la vía

para enviar un mensaje al objeto y que éste reaccione acorde a dicho mensaje

ENCAPSULAMIENTO

En programación orientada a objetos, se denomina encapsulamiento al ocultamiento del

estado, es decir, de los datos miembro, de un objeto de manera que sólo se puede

cambiar mediante las operaciones definidas para ese objeto.

Cada objeto está aislado del exterior, es un módulo natural, y la aplicación entera se

reduce a un agregado o rompecabezas de objetos. El aislamiento protege a los datos

asociados a un objeto contra su modificación por quien no tenga derecho a acceder a

ellos, eliminando efectos secundarios e interacciones.

De esta forma el usuario de la clase puede obviar la implementación de los métodos y

propiedades para concentrarse sólo en cómo usarlos. Por otro lado se evita que el usuario

pueda cambiar su estado de maneras imprevistas e incontroladas.

Como se puede observar de los diagramas, las variables del objeto se localizan en el

centro o núcleo del objeto. Los métodos rodean y esconden el núcleo del objeto de otros

Page 8: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 8

objetos en el programa. 'Al empaquetamiento de las variables de un objeto con la

protección de sus métodos se le llama encapsulamiento. Típicamente, el encapsulamiento

es utilizado para esconder detalles de la puesta en práctica no importantes de otros

objetos. Entonces, los detalles de la puesta en práctica pueden cambiar en cualquier

tiempo sin afectar otras partes del programa.

Formas de encapsular

1. Estándar (Predeterminado)

2. Abierto : Hace que el miembro de la clase pueda ser accedido desde el exterior de

la Clase y cualquier parte del programa.

3. Protegido : Solo es accesible desde la Clase y las clases que heredan (a cualquier

nivel).

4. Semi cerrado : Solo es accesible desde la clase heredada

5. Cerrado : Solo es accesible desde la Clase.

En el encapsulamiento hay analizadores que pueden ser semánticos y sintácticos.

PRINCIPIO DE OCULTAMIENTO

En programación orientada a objetos el principio de ocultación hace referencia a que

los atributos privados de un objeto no pueden ser modificados ni obtenidos a no ser que

se haga a través del paso de un mensaje (invocación a métodos, ya sean estos funciones

o procedimientos).

POLIMORFISMO

En programación orientada a objetos el polimorfismo se refiere a la posibilidad de enviar

un mensaje a un grupo de objetos cuya naturaleza puede ser heterogénea. El único

requisito que deben cumplir los objetos que se utilizan de manera polimórfica es saber

responder al mensaje que se les envía.

La apariencia del código puede ser muy diferente dependiendo del lenguaje que se utilice,

más allá de las obvias diferencias sintácticas.

Por ejemplo, en un lenguaje de programación que cuenta con un sistema de

tipos dinámico (en los que las variables pueden contener datos de cualquier tipo u objetos

de cualquier clase) como Smalltalk no se requiere que los objetos que se utilizan de modo

polimórfico sean parte de una jerarquía de clases.

En lenguajes basados en clases y con un sistema de tipos de datos fuerte

(independientemente de si la verificación se realiza en tiempo de compilación o de

ejecución), es posible que el único modo de poder utilizar objetos de manera polimórfica

sea que compartan una raíz común, es decir, una jerarquía de clases, ya que esto

proporciona la compatibilidad de tipos de datos necesaria para que sea posible utilizar

Page 9: Introduccion a la programacion orientada a objetos

CONCEPTUALIZACION PROGRAMACION ORIENTADA A OBJETOS 9

una misma variable de referencia (que podrá apuntar a objetos de diversas subclases de

dicha jerarquía) para enviar el mismo mensaje (o un grupo de mensajes) al grupo de

objetos que se tratan de manera polimórfica.

En Java, es frecuente y profusamente aconsejada la utilización de interfaces (que es un

mecanismo del lenguaje que se emplea por medio de la palabra clave Interface) para

proveer la necesaria concordancia de tipos para hacer posible el polimorfismo, también

como un contrato que debe cumplir cualquier clase que implemente una cierta interfaz y

como una forma de documentación para los desarrolladores. A veces, en la literatura que

refiere específicamente a Java se hace mención a "herencia y polimorfismo de interfaces",

lo que no concuerda con los conceptos de la programación orientada a objetos porque

una clase que implementa una interfaz sólo obtiene su tipo de datos y la obligación de

implementar sus métodos, no obtiene comportamiento ni de atributos. Esto muchas veces

resulta paradójico porque en Java frecuentemente se utiliza la mal llamada "herencia de

interfaces" para dotar a una clase con un tipo adicional (o varios) para que su uso en

combinación con la agregación (colaboración o composición) permita evitar la necesidad

de la herencia múltiple y favorezca una utilización más amplia del polimorfismo.

No obstante, el uso de una jerarquía de clases como paso previo, es muy habitual incluso

en aquellos lenguajes en los que es posible prescindir de tal jerarquía, ya que, desde una

perspectiva conceptual, se puede decir que al pertenecer los "objetos polimórficos" a

subclases de una misma jerarquía, se asegura la equivalencia semántica de los mensajes

que se invocarán de modo polimórfico. Por esto, en programación orientada a objetos a

veces se denomina al polimorfismo como "polimorfismo de subclase (o de subtipo)".

En resumen, en la programación orientada a objetos, la esencia del polimorfismo no atañe

a la clase o prototipo de la que provienen los objetos. Aun así, en los lenguajes basados

en clases, es habitual (y en algunos tal vez sea el único modo) que dichos objetos

pertenezcan a subclases pertenecientes a una misma jerarquía. Entonces, el polimorfismo

debe verse como una forma flexible de usar un grupo de objetos (como si fueran sólo

uno). Podría decirse que el polimorfismo en esencia refiere al comportamiento de los

objetos, no a su pertenencia a una jerarquía de clases (o a sus tipos de datos).

Lo anterior se hace aún más evidente en lenguajes de programación orientada a objetos

basados en prototipos, como Self, en los que las clases no existen.

POLIMORFISMO DESDE UNA INTERFAZ

Aunque el polimorfismo es el mismo se aplique donde se aplique, el modo en que se

aplica desde una interfaz puede resultar un poco más oscuro y difícil de entender. Se

expone un sencillo ejemplo (en VB-NET) comentado para entender como funciona

aplicado desde una interfaz, primero se escribe el código y luego se comenta el

funcionamiento. Nota: para no enturbiar el código en exceso, todo lo que no se declara

privado se sobreentiende público.