características programacion orientada a objetos (poo)

11

Click here to load reader

Upload: diegosalamancab

Post on 11-Jun-2015

24.503 views

Category:

Documents


1 download

DESCRIPTION

documento acerca de la programacion arientada a objetos, y algunas de la formas de su uso en vb y java...

TRANSCRIPT

Page 1: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNET

CARACTERÍSTICAS POO

ABSTRACCIÓN

Ignorancia Selectiva

La abstracción nos ayuda a trabajar con cosas complejas

Se enfoca en lo importante

Ignora lo que no es importante (simplifica)

Una clase es una abstracción en la que:

Se enfatizan las características relevantes

Se suprimen otras características

Una clase debe capturar una y solo una abstracción clave

El proceso de abstracción permite seleccionar las características relevantes dentro de un conjunto e identificar comportamientos comunes para definir nuevos tipos de entidades en el mundo real. La abstracción es clave en el proceso de análisis y diseño orientado a objetos, ya que mediante ella podemos llegar a armar un conjunto de clases que permitan modelar la realidad o el problema que se quiere atacar.

HERENCIA

Es una relación entre clases en la cual una clase comparte la estructura y comportamiento definido en otra clase (Grady Booch)

Cada clase que hereda de otra posee:

Los atributos de la clase base además de los propios

Soporta todos o algunos de los métodos de la clase base

Una subclase hereda de una clase base

La herencia (en la POO) es una potente arma que podemos utilizar para varias cosas, entre ellas, por ejemplo, ahorrar líneas de código heredando de otras clases, compartiendo variables miembro o función miembro. También podemos generar superclases abstractas para definir comportamientos genéricos que necesitemos. La herencia es una de las características que más se hace notar a la hora de escribir código, o reutilizar código de otros programadores. (1)

ENCAPSULAMIENTO

Principio que establece que los atributos propios de un objeto no deben ser visibles desde otros objetos

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

+Avanzar()+Detenerse()

-pasajeros

Transporte

Automóvil Avión

Clase Base

Clases Derivadas o

subclases

Page 2: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNET

Deben ser declarados como privados

Permite abstraer al resto del mundo de la complejidad de la implementación interna

Permite exponer el estado del objeto sólo a través del comportamiento que le hayamos definido mediante miembros públicos

¿Por qué es útil?

Punto de Control/Validación

Mejor respuesta ante los Cambios

Otro de los pilares de la orientación a objetos es el encapsulamiento. Para entender este principio veamos un ejemplo práctico:

Como todos ustedes se imaginarán, no es necesario ser mecánico de automóviles para poder manejar uno. Si el comprender cómo es el funcionamiento interno del motor, la dirección, los frenos, los cilindros, etc. fuera requisito para poder manejar un automóvil, serían muchos menos los conductores certificados y sería mucho más difícil aprender a manejar. Es más, si a cualquier automotriz se le ocurriera cambiar el funcionamiento interno de alguna de estas cosas, probablemente todos los conductores tendrían que volver a aprender como funciona el nuevo componente interno para poder seguir manejando sin problemas. Por suerte esto no es así, ya que la complejidad interna del funcionamiento de un automóvil está escondida de los conductores (usuarios). Para poder interactuar con el automóvil, éste nos expone una interfaz sencilla y definida, que no cambia nunca por más que cambien internamente el funcionamiento de sus componentes. Esta interfaz está compuesta por el volante, los pedales, la palanca de cambios, el asiento, etc. De esta forma decimos que el automóvil ha encapsulado su complejidad interna.

POLIMORFISMO

Es la propiedad que tienen los objetos de permitir invocar genéricamente un comportamiento (método) cuya implementación será delegada al objeto correspondiente recién en tiempo de ejecución

El polimorfismo tiende a existir en las relaciones de herencia, pero no siempre es así

Ejemplo:

Aquí tenemos un ejemplo práctico de la implementación de polimorfismo en un diseño orientado a objetos. Por un lado tenemos la clase base “Transporte”, que posee los métodos “Avanzar” y “Frenar”.

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

Transporte

Avanzar

Frenar

Transporte

Avanzar

Frenar

Transporte

Avanzar

Frenar

TransporteAvanzar

Frenar

Page 3: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNETPor otro lado tenemos tres clases distintas derivadas de la clase “Transporte”, cada una de las cuales podrá sobrescribir la implementación de los métodos Avanzar y Frenar para que su comportamiento sea más específico.

Ahora bien, como todas heredan de la misma clase base, las clases derivadas pueden ser tratadas genéricamente. Esto quiere decir que podríamos tener un array que almacene objetos de tipo Transporte, y recorrerlo luego para llamar al método “Avanzar” de cada uno. De esta forma, en tiempo de codificación es imposible saber a qué método “Avanzar” se está llamando en realidad (al del Auto? Al del caballo? Al del transbordador?), sino que esta decisión es tomada en tiempo de ejecución en base al tipo particular de objeto que esté instanciado.

En pseudocódigo, esto se escribiría de la siguiente manera:

Definir arrayTransportes (3) de tipo Transporte

arrayTransportes(1) = nuevo Automóvil() //Un automóvil ES UN TIPO DE transporte

arrayTransportes(2) = nuevo Transbordador() //Un Transbordador ES UN TIPO DE transporte

arrayTransportes(3) = nuevo Caballo() //Un Caballo ES UN TIPO DE transporte

Por Cada (Transporte t en arrayTransportes)

t.Avanzar()

t.Frenar()

Fin

RELACIONES

Todo sistema abarca muchas clases y objetos

Los objetos contribuyen en el comportamiento de un sistema colaborando entre si

La colaboración se logra a través de las relaciones

Existen dos tipos principales de relaciones

Asociación

Agregación

RELACIONES DE ASOCIACIÓN

Una asociación es una conexión entre dos clases que representa una comunicación

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

Page 4: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNET

Una asociación puede tener nombre

La comunicación puede ser tanto uni como bi-direccional (por defecto)

La multiplicidad es el número de instancias que participan en una asociación

Ejemplo:

Una Persona es Dueña de un Vehículo

Un Vehículo Pertenece a una Persona

Esta se divide:

Composición

Agregación

RELACIÓN DE COMPOSICIÓN (2)

Agregar o componer varios objetos para obtener una mayor funcionalidad

! Un objeto se puede construir a partir de otros objetos

RELACIONES DE AGREGACIÓN

La agregación es una forma especial de asociación donde un todo se relaciona con sus partes

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

Page 5: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNET

También se conoce como “una parte de” o una relación de contención

Ejemplo:

Una Puerta es una parte de un Vehículo

El Vehículo es azul, la Puerta es Azul

Mover el Vehículo implica mover la Puerta

ELEMENTOS DE LA POO (PROGRAMACIÓN ORIENTADA A OBJETOS)

En la actualidad, el paradigma de orientación a objetos es sin lugar a dudas el más utilizado por las empresas de todo el mundo a la hora de encarar desarrollos de aplicaciones de software, ya que permite representar de manera relativamente simple modelos y realidades muy complejas y esto hace que el software sea más fácil de programar, comprender y mantener. Por otra parte, luego de más de 20 años de investigación y desarrollo sobre Orientación a Objetos pareciera ser que la industria se ha dado cuenta que el paradigma está lo suficientemente maduro como para dar soporte a las aplicaciones más importantes del mundo actual.

¿Qué es un objeto?

Informalmente, un objeto representa una entidad del mundo real

Entidades Físicas

(Ej.: Vehículo, Casa, Producto)

Entidades Conceptuales

(Ej.: Proceso Químico, Transacción Bancaria)

Entidades de Software

(Ej.: Lista Enlazada, Interfaz Gráfica)

Definición Formal (Rumbaugh):

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

Page 6: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNET

“Un objeto es un concepto, abstracción o cosa con un significado y límites claros en el problema en cuestión”

Un objeto posee (Booch):

Estado

Comportamiento

Identidad

En resumen un objeto es una abstracción de la realidad que tiene un significado concreto y claro para el problema que se está modelando.

¿QUÉ ES UNA CLASE?

Una clase es una descripción de un grupo de objetos con:

Propiedades en común (atributos)

Comportamiento similar (operaciones)

La misma forma de relacionarse con otros objetos (relaciones)

Una semántica en común (significan lo mismo)

Una clase es una abstracción que:

Enfatiza las características relevantes

Suprime otras características (simplificación)

Un objeto es una instancia de una clase

METODOS

Existe una clasificación de los métodos según su objetivo:

Son las funcionalidades asociadas a los objetos. Cuando estamos programando las clases las llamamos métodos.

Los métodos son como funciones que están asociadas a un objeto.

Un método NO es una función.

Una función tiene 0 o más argumentos, el método tiene SIEMPRE 1 o más. Ese argumento obligatorio

Con el nombre de una función disponemos de una implementación, con un método tenemos la posibilidad de una implementación por objeto (empleando el mismo nombre).

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

Page 7: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNETSOBRECARGA DE MÉTODOS

La sobrecarga de métodos es la creación de varios métodos con el mismo nombre pero con diferentes firmas y definiciones.

SOBRE ESCRITURA DE MÉTODOS

La sobreescritura de métodos es una característica más de la herencia en Java. Es decir, en Java las nuevas clases se pueden definir extendiendo clases ya existentes. Aquí surgen los conceptos de subclase que sería la clase obtenida, y superclase, que sería la clase que está siendo extendida, tal como también ya se ha explicado.

Cuando una nueva clase se extiende desde otra que ya existía, todas las variables y métodos que son miembros de la superclase (y todos aquellos miembros de los antecesores de la superclase) serán también miembros de la subclase.

ATRIBUTOS

Características de cada objeto o propiedades del mismo

PROPIEDADES

Las propiedades permiten implementar el encapsulamiento, impidiendo el acceso directo a los atributos de una clase y proporcionando un mecanismo para poder obtener y asignar sus valores.

Nótese que como VB.NET no distingue entre mayúsculas y minúsculas no es posible utilizar para el miembro de la clase el mismo nombre que para la Propiedad. Sin embargo, es importante que ambos tengan nombres significativos para la lógica de la aplicación. No se recomienda el agregado de prefijos o sufijos a los nombres.

Mensajes (Comentarios)

C# soporta 3 tipos de comentarios

string nombre = “Juan”; // Comentario de una sola línea

/* Comentario con mas

de una línea*/

/// <summary>

/// Documentación XML que puede ser consumida por otras

/// herramientas para mostrar ayuda dinámica o generar

/// documentación en varios formatos

/// </summary>

public class Matematica {

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

Page 8: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNET /// <summary>

/// Calcula la suma de dos números enteros

/// </summary>

/// <param name="x">El primer operando de la suma</param>

/// <param name="y">El segundo operando de la suma</param>

/// <returns> La suma entera de ambos operandos</returns>

public int Sumar (int x, int y) {return x + y;}

VB.NET soporta dos tipos de comentarios

'Comentario simple

Dim nombre As String = “Juan”

''' <summary>

''' Documentación XML que describe un tipo y sus miembros

''' </summary>

''' <param name="x">El primer operando de la suma</param>

''' <param name="y">El segundo operando de la suma</param>

''' <returns> La suma entera de ambos operandos</returns>

Public Function Sumar (x as Integer, y as Integer) as Integer

return x + y

End Function

INTERFACES

Recurso de diseño soportado por los lenguajes orientados a objetos que permite definir comportamiento

Permite que clases que no están estrechamente relacionadas entre sí deban tener el mismo comportamiento

La implementación de una interfaz es un contrato que obliga a la clase a implementar todos los métodos definidos en la interfaz

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf

Page 9: Características programacion orientada a objetos (POO)

Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)DCE0_FundamentosDeProgramacionDCE0_ProgramacionOO_C#_VBNET

Se crean las interfaces que definen comportamiento

Hidroavión deberá definir los comportamientos de cada una de las interfaces que implemente

(1)http://www.joanballestermoragues.com/blog/ingenieria-software/analisis-sistemas/programacion-orientada-a-objetos-herencia.html(2) http://www.pol.una.py/archivos/asi/paradigmas/01ConceptosOO.pdf