características programacion orientada a objetos (poo)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/1.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/2.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/3.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/4.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/5.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/6.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/7.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/8.jpg)
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)](https://reader037.vdocumento.com/reader037/viewer/2022100506/5571f2b249795947648ce935/html5/thumbnails/9.jpg)
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