Está en la página 1de 9

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

DCE0_FundamentosDeProgramacion
DCE0_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

 Deben ser declarados como privados

(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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET
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”. Por 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?

(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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET
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

 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:

(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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET
 Una Persona es Dueña de un Vehículo

 Un Vehículo Pertenece a una Persona

Persona -dueño Vehiculo

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

 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

(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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET
Vehiculo Puerta
-color
+Mover()

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):

 “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:


(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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET
 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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET
SOBRECARGA 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>
(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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET
public class Matematica {

/// <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
Mayor Cantidad del tema, tomado de: (Programador 5 Estrellas)
DCE0_FundamentosDeProgramacion
DCE0_ProgramacionOO_C#_VBNET

Vehiculo

Aereo Acuatico Terrestre

Avión Barco Automóvil


Se crean las interfaces que definen comportamiento

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


interfaces que implemente

«interface» «interface»
Acuatico Aereo
+Navegar() +Volar()

Hidroavion

(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