INTRODUCCIÓN
• Los problemas suelen tener varias soluciones posibles.
• En programación existen diversas metodologías que nos
ayudan a enfrentar un problema.
• Cada metodología tiene diversos lenguajes que las
soportan.
• Algunos lenguajes soportan varias metodologías.
Metodología Lenguaje
Estructurada Fortran, C, Pascal, Basic
Orientada a objetos (OOP) C++, Java, Smalltalk
Orientada a eventos VisualBasic
PROGRAMACIÓN ORIENTADA A OBJETOS
Definición:
La Programación Orientada a Objetos (OOP) es un
método de programación en el cual los programas se
organizan en colecciones cooperativas de objetos,
cada uno de los cuales representa una instancia de
alguna clase, y cuyas clases son, todas ellas, miembros
de una jerarquía de clases unidas mediante relaciones
de herencia.
Comentarios:
• Usamos objetos en lugar de algoritmos como bloque fundamental
• Cada objeto es una instancia de una clase
• Las clases están relacionadas entre sí por relaciones tan complejas
como la herencia
VENTAJAS DE LA POO
• Proximidad de los conceptos modelados respecto a objetos del mundo real
• Facilita la reutilización de código
• Y por tanto el mantenimiento del mismo
• Se pueden usar conceptos comunes durante las fases de análisis, diseño e
implementación
• Disipa las barreras entre el qué y el cómo
DESVENTAJAS DE LA POO
• Mayor complejidad a la hora de entender el flujo de datos
• Pérdida de linealidad
• Requiere de un lenguaje de modelización de problemas más elaborado:
• Unified Modelling Language (UML)
• Representaciones gráficas más complicadas
CONCEPTOS DE LA OOP
Conceptos básicos
• Objeto
• Clase
Características de la OOP
• Abstracción:
• Encapsulamiento:
• Modularidad:
• Jerarquía
Otros conceptos OOP
• Tipos
• Persistencia
Tipos de relaciones
• Asociación
• Herencia
• Agregación
• Instanciación
Representaciones gráficas
• Diagramas estáticos (de
clases, de objetos...)
• Diagramas dinámicos (de
interacción...)
OBJETO Y CLASE
Un objeto es algo de lo
que hablamos y que
podemos manipular
• Existen en el mundo real (o en nuestro
entendimiento del mismo)
Una clase describe los
objetos del mismo tipo
• Todos los objetos son instancias de una
clase
• Describe las propiedades y el
comportamiento de un tipo de objetos
Clase
Atributos
Operaciones
Objeto:Clase
Atributo1=valor
Atributo2=valor
...
CONCEPTOS OOP: ABSTRACCIÓN
• Nos permite trabajar con la complejidad del mundo real
• Resaltando los aspectos relevantes de los objetos de una clase
• Ocultando los detalles particulares de cada objeto
• Separaremos el comportamiento de la implementación
• Es más importante saber qué se hace en lugar de cómo se
hace:
Un sensor de temperatura
• Se define porque...
• mide la temperatura
• nos muestra su valor
• se puede calibrar...
• No sabemos... (no nos importa)
• cómo mide la temperatura
• de qué está hecho
• cómo se calibra
CONCEPTOS OOP: ABSTRACCIÓN
• La abstracción no es única:
Un coche puede ser...
• Una cosa con ruedas, motor, volante y
pedales (conductor)
• Algo capaz de transportar personas (taxista)
• Una caja que se mueve (simulador de tráfico)
• Conjunto de piezas (fabricante)
CONCEPTOS OOP: ENCAPSULAMIENTO
• Ninguna parte de un sistema complejo debe depender de los
detalles internos de otra.
• Complementa a la abstracción
• Se consigue:
• Separando la interfaz de su implementación
• Ocultando la información interna de un objeto
• Escondiendo la estructura e implementación de los métodos
(algoritmos).
• Exponiendo solo la forma de interactuar con el objeto
CONCEPTOS OOP: ENCAPSULAMIENTO
Vemos que se puede...
• Construir con:
• 4 puntos (y restricciones)
• 1 punto y 2 vectores
• 1 punto, 1 vector, 1 ángulo
y 1 lado
• Transformaciones:
• Escalado
• Rotación
• Desplazamiento
• Dibujar
No vemos...
• Como está representado
internamente
• 4 puntos?
• 1 punto y 2 vectores?
• ...
• Como se modifica su escala
• Guardando el factor?
• Escalando en el momento?
• Idem para rotación, traslación,
etc...
Ejemplo: Un paralelogramo
CONCEPTOS OOP: MODULARIDAD
• Consiste en separar el sistema en bloques poco ligados
entre sí: módulos.
• Organización del código
• Es una especie de encapsulamiento de más alto nivel.
• El C++ no lo impone aunque lo soporta (namespace)
• El Java es más formal (packages)
• Difícil pero muy importante en sistemas grandes.
• Suele aplicarse refinando el sistema en sucesivas iteraciones
• Cada módulo debe definir una interfaz clara
CONCEPTOS OOP: MODULARIDAD
Ejemplo: Simulación detector de AAEE
Puede dividirse en los siguientes módulos...
1. Geometría: Describe el detector
físicamente (forma, materiales, tamaño)
2. Partículas: Las partículas cuyas
interacciones nos interesan
3. Procesos: Aquí enlazamos la información
del detector (materia) con las propiedades
de las partículas.
4. ...
• Podríamos dividir el módulo de procesos en procesos
electromagnéticos, procesos hadrónicos, ...
• Lo mismo podríamos hacerlo con las partículas: leptones, hadrones,
...
CONCEPTOS POO: JERARQUÍA
• Es una clasificación u ordenamiento de las abstracciones
• Hay dos jerarquías fundamentales:
• Estructura de clases:
• Jerarquía “es un/a”
• Relaciones de herencia
• Estructura de objetos:
• Jerarquía “parte de”
• Relaciones de agregación
• Está implementada de manera genérica en la estructura de clases
CONCEPTOS OOP: JERARQUÍA
• Una figura plana es:
• Algo con una posición en el
plano
• Escalable
• Rotable
• Un gráfico es algo que se
puede dibujar en 2D
• Un diagrama es un conjunto
de cuadrados y círculos
Herencia simple
• Un cuadrado es una figura
• Un círculo es una figura
Herencia múltiple
es una figura
es un gráfico
Agregación
Ejemplo: Figuras planas y diagramas
CONCEPTOS OOP: TIPO
• Es el reforzamiento del concepto de clase
• Objetos de tipo diferente no pueden ser intercambiados
• El C++ y el Java son lenguajes fuertemente “tipeados”
• Ayuda a corregir errores en tiempo de compilación
• Mejor que en tiempo de ejecución
CONCEPTOS OOP: PERSISTENCIA
• Propiedad de un objeto de trascender en el tiempo y en
el espacio a su creador (programa que lo generó)
• No se trata de almacenar sólo el estado de un objeto
sino toda la clase (incluido su comportamiento)
• No está directamente soportado por el C++
• Existen librerías y sistemas completos (OODBMS) que facilitan
la tarea
• Frameworks (entornos) como ROOT lo soportan parcialmente
(reflex)
• El concepto de serialización del Java está directamente
relacionado con la persistencia
RELACIONES
• Están presentes en cualquier sistema
• Definen como se producen los intercambios de información y
datos
• También ayudan a comprender las propiedades de unas
clases a partir de las propiedades de otras
• Existen 4 tipos de relaciones:
• Asociación
• Herencia
• Agregación
• Instanciación
RELACIÓN DE ASOCIACIÓN
• Relación más general
• Denota una dependencia semántica
• Es bidireccional
• Primer paso para determinar una relación
más compleja
Ejemplo: Relación entre un producto y una venta. Cualquier venta
está asociada a un producto, pero no es, ni forma parte de, ni
posee ningún producto… al menos en una primera aproximación.
• Cardinalidad: multiplicidad a cada lado
• Uno a uno: Venta-Transacción
• Uno a muchos: Producto-Venta
• Muchos a muchos: Comprador-Vendedor
RELACIÓN DE HERENCIA
• ¡Relación característica de la OOP!
• Puede expresar tanto especialización como
generalización
• Evita definir repetidas veces
las características comunes a
varias clases
• Una de las clases comparte la estructura y/o el
comportamiento de otra(s) clase(s).
• También se denomina relación “es un/a” (is a)
RELACIÓN DE HERENCIA (VOCABULARIO)
• Clase base o superclase: clase de la cual se hereda
• Clase derivada o subclase: clase que hereda
• Herencia simple: Hereda de una sola clase
• Herencia múltiple: Hereda de varias clases
• Java solo la soporta parcialmente
• Presenta diversos problemas (¿qué hacer cuando se hereda más de una vez de la misma
clase?)
• Clase abstracta: La que no lleva, ni puede llevar, ningún objeto asociado
• Polimorfismo: Posibilidad de usar indistintamente todos los objetos de un
clase y derivadas.
RELACIÓN DE HERENCIA (EJEMPLO)
Figura plana
Triángulo
Rectángulo
Equilátero
Escaleno
Isósceles
Cuadrado
Polimorfismo
Clase abstracta
Superclase Subclase
Herencia simple
RELACIÓN DE AGREGACIÓN
• Una clase contiene a otra
clase
• Ésta “es parte de” aquélla.
• También se denomina
relación “es parte de” (has a)
• Una clase puede contener a otra:
• Por valor: Cuando los objetos de la clase contenida se crean y
destruyen al mismo tiempo que los de la clase continente
• Por referencia: Cuando no necesariamente ocurre lo anterior
RELACIÓN DE AGREGACIÓN
Un coche está hecho de
• Volante
• Palanca de cambio
• Motor
• Ruedas
Ruedas
Volante
Marchas
Motor
Coche
RELACIÓN DE INSTANCIACIÓN
• En determinados casos una clase (p.ej. un vector) puede
implementarse independientemente del tipo (real, complejo,
color...) de alguno de sus atributos:
• Definimos una clase
parametrizada o template
(plantilla)
• Para cada uno de los tipos
que necesitemos
definimos una nueva
clase  Instanciación
Tipo
Vector
VectorEnteros
<int>
VectorColores
<Color>
REPRESENTACIONES GRÁFICAS
• Nos sirven para comunicarnos con otros usuarios o
desarrolladores.
• Documentan nuestro sistema
• Hay múltiples vistas y tipos de diagramas:
• Estáticos
• Diagramas de clases  Los de los ejemplos
• Diagramas de objetos
• ...
• Dinámicos:
• Diagramas de estado: Muestra el ciclo de vida de los objetos,
sistemas, etc...
• Diagramas secuenciales: Muestra como los objetos interaccionan
entre ellos
• ...
DIAGRAMA DE ESTADO: UN ASCENSOR
En el primer
piso
Subiendo
Bajando al
primer piso
Bajando Parado
subir
llegué
llegué subir
bajar
time-out
llegué
PROGRAMACIÓN
ORIENTADAA
OBJETOS EN
VISUAL BASIC .NET
INTRODUCCIÓN
• Entender el concepto
de clase
• Trabajar con clases
• Uso de miembros
compartidos
• Herencia, polimorfismo
y espacios de nombres
Debug
and Deploy
Escribir
Código
Acceso
a datos
Uso de Visual
Studio .NET
Depurar e
implantar
Crear
Interfaz
LECCIÓN: ENTENDER EL CONCEPTO DE CLASE
• Una clase es una estructura preliminar que describe
un objeto y define atributos y operaciones para el
objeto
• Las clases utilizan abstracción para poner a
disposición únicamente los elementos esenciales que
definen el objeto
• Las clases utilizan encapsulación para garantizar que
se cumple una abstracción
¿QUÉ ES UNA CLASE?
Lo que ve el usuario: Lo que está encapsulado:
//verify language
//authenticate PIN
//validate account bal
//adjust account bal
¿QUÉ ES UN OBJETO?
• Un objeto es una instancia de una clase
• Los objetos tienen las siguientes cualidades:
• Identidad: los objetos se distinguen uno de otro
• Comportamiento: los objetos pueden realizar tareas
• Estado: los objetos almacenan información que puede
cambiar con el tiempo
123
245
12
245
Objet
o Objet
o
Clase
CÓMO UTILIZAR EL EXAMINADOR DE OBJETOS
Panel
Objetos
Panel
Miembros
Panel
Descripción
LECCIÓN: TRABAJAR CON CLASES
• Cómo crear una nueva clase
• Cómo agregar miembros de datos de una instancia
• Cómo agregar métodos
• Cómo agregar propiedades
• Cómo crear una instancia de una clase
• Cómo utilizar los constructores
• Cómo utilizar los destructores
CÓMO CREAR UNA NUEVA CLASE
• Crear una nueva clase utilizando el comando Agregar clase del menú Proyecto
• Ejemplo de una nueva clase denominada BankAccount:
Public Class Class1
End Class
Public Class BankAccount
End Class
CÓMO AGREGAR MIEMBROS DE DATOS DE
UNA INSTANCIA
 Agregar un miembro de datos denominado balance
Public Class BankAccount
Private balance As Double
End Class
Palabra
clave
Definición
Public Accesible en todas partes
Private Accesible sólo en el propio tipo
Protected
Accesible sólo por clases que heredan
de la clase
CÓMO AGREGAR MÉTODOS
 Agregar un método denominado Deposit
Public Class BankAccount
Private balance As Double
Public Sub Deposit(ByVal amount As Double)
balance += amount
End Sub
End Class
 Métodos sobrecargados: dos o más métodos con el
mismo nombre pero diferentes firmas
Ejemplo: MessageBox.Show
 Agregar una propiedad:
CÓMO AGREGAR PROPIEDADES
Public Class BankAccount
Private customerName As String
Public Property Name( ) As String
Get
Return customerName
End Get
Set(ByVal Value As String)
customerName = Value
End Set
End Property
End Class
CÓMO CREAR UNA INSTANCIA DE
UNA CLASE
• Uso de la palabra clave New para crear una instancia de la clase BankAccount:
Module Bank
Sub Main
Dim account As New BankAccount( )
account.Deposit(500.00)
End Sub
End Module
PRÁCTICA: CREACIÓN DE UNA CLASE
• En esta práctica, crearemos una clase
BankAccount con métodos y propiedades
CÓMO UTILIZAR LOS CONSTRUCTORES
• Ejecutan código cuando el objeto está instanciado
Public Sub New(ByVal i As Integer)
' Overloaded without Overloads keyword
' Perform more complex initialization
value = i
End Sub
 Pueden sobrecargarse, pero no utilizan la palabra clave
Overloads
Public Sub New( )
' Perform simple initialization
value = 1
End Sub
CÓMO UTILIZAR LOS
DESTRUCTORES
• Se utilizan para eliminar recursos
• Se invocan por el entorno de ejecución antes de destruir el objeto
• Importante: es posible que la destrucción no se produzca de modo inmediato
Protected Overrides Sub Finalize( )
' Can close connections or other resources
conn.Close
End Sub
LECCIÓN: USO DE MIEMBROS
COMPARTIDOS
• Cómo utilizar miembros de datos compartidos
• Cómo utilizar métodos compartidos
CÓMO UTILIZAR LOS MIEMBROS DE
DATOS COMPARTIDOS
• Los miembros de datos compartidos permiten que múltiples instancias hagan
referencia a una única variable de nivel de clase
SavingsAccount.InterestRate = 0.03
Class SavingsAccount
Public Shared InterestRate As Double
Public Name As String, Balance As Double
. . .
End Class
CÓMO UTILIZAR LOS MÉTODOS
COMPARTIDOS
• Pueden utilizarse sin declarar una instancia de una clase
• Únicamente pueden acceder a datos compartidos
' TestClass code
Public Shared Function GetComputerName( ) As String
...
End Function
' Client code
MessageBox.Show(TestClass.GetComputerName( ))
PRÁCTICA: CREACIÓN DE MÉTODOS
COMPARTIDOS
• En esta práctica,
• Crearemos una clase
• Agregaremos métodos compartidos
• Utilizaremos métodos compartidos
LECCIÓN: HERENCIA, POLIMORFISMO Y
ESPACIOS DE NOMBRES
¿QUÉ ES LA HERENCIA?
 La herencia especifica una relación “es un tipo de”
 Múltiples clases comparten los mismos atributos y
operaciones, permitiendo una eficaz reutilización del
código
 Ejemplos:
 Un cliente “es un tipo de” persona
 Un empleado “es un tipo de” persona
Cliente Empleado
Persona
Clase base
Clases derivadas
CÓMO HEREDAR DE UNA CLASE
• Una clase derivada hereda de una clase base
• Pueden heredarse propiedades, métodos, miembros de datos, eventos y
controladores de eventos (dependiendo del ámbito)
• Palabras clave
• Inherits: hereda de una clase base
• NotInheritable: no es heredable
• MustInherit: no pueden crearse instancias de la clase; debe ser heredada como una
clase base
¿QUÉ ES EL POLIMORFISMO?
• El nombre del método reside en la clase base
• Las implementaciones del método residen en las clases derivadas
BaseTax
CalculateTax( )
CountyTax
CalculateTax( )
CityTax
CalculateTax( )
COMPARACIÓN ENTRE CLASES Y
ESTRUCTURAS
Clases Estructuras
Pueden definir miembros de datos,
propiedades y métodos
Pueden definir miembros de
datos,
propiedades y métodos
Soportan constructores e
inicialización de miembros
Sin constructor
predeterminado ni
inicialización de miembros
Soportan el método Finalize
No soportan el método
Finalize
Extensibles por herencia No soportan herencia
Tipo Referencia Tipo Valor
CÓMO ORGANIZAR CLASES EN
ESPACIOS DE NOMBRES
• Los espacios de nombres son un sistema organizativo
• Los espacios de nombres proporcionan nombres cualificados para las clases
• Ejemplo: System.Windows.Forms.Button
• Para importar un espacio de nombres:
• A nivel de proyecto, agregar una referencia a la DLL que contiene el espacio de nombres
• Utilizar la palabra clave Imports
Programación Orientada  a Objetos

Programación Orientada a Objetos

  • 2.
    INTRODUCCIÓN • Los problemassuelen tener varias soluciones posibles. • En programación existen diversas metodologías que nos ayudan a enfrentar un problema. • Cada metodología tiene diversos lenguajes que las soportan. • Algunos lenguajes soportan varias metodologías. Metodología Lenguaje Estructurada Fortran, C, Pascal, Basic Orientada a objetos (OOP) C++, Java, Smalltalk Orientada a eventos VisualBasic
  • 3.
    PROGRAMACIÓN ORIENTADA AOBJETOS Definición: La Programación Orientada a Objetos (OOP) es un método de programación en el cual los programas se organizan en colecciones cooperativas de objetos, cada uno de los cuales representa una instancia de alguna clase, y cuyas clases son, todas ellas, miembros de una jerarquía de clases unidas mediante relaciones de herencia. Comentarios: • Usamos objetos en lugar de algoritmos como bloque fundamental • Cada objeto es una instancia de una clase • Las clases están relacionadas entre sí por relaciones tan complejas como la herencia
  • 4.
    VENTAJAS DE LAPOO • Proximidad de los conceptos modelados respecto a objetos del mundo real • Facilita la reutilización de código • Y por tanto el mantenimiento del mismo • Se pueden usar conceptos comunes durante las fases de análisis, diseño e implementación • Disipa las barreras entre el qué y el cómo
  • 5.
    DESVENTAJAS DE LAPOO • Mayor complejidad a la hora de entender el flujo de datos • Pérdida de linealidad • Requiere de un lenguaje de modelización de problemas más elaborado: • Unified Modelling Language (UML) • Representaciones gráficas más complicadas
  • 6.
    CONCEPTOS DE LAOOP Conceptos básicos • Objeto • Clase Características de la OOP • Abstracción: • Encapsulamiento: • Modularidad: • Jerarquía Otros conceptos OOP • Tipos • Persistencia Tipos de relaciones • Asociación • Herencia • Agregación • Instanciación Representaciones gráficas • Diagramas estáticos (de clases, de objetos...) • Diagramas dinámicos (de interacción...)
  • 7.
    OBJETO Y CLASE Unobjeto es algo de lo que hablamos y que podemos manipular • Existen en el mundo real (o en nuestro entendimiento del mismo) Una clase describe los objetos del mismo tipo • Todos los objetos son instancias de una clase • Describe las propiedades y el comportamiento de un tipo de objetos Clase Atributos Operaciones Objeto:Clase Atributo1=valor Atributo2=valor ...
  • 8.
    CONCEPTOS OOP: ABSTRACCIÓN •Nos permite trabajar con la complejidad del mundo real • Resaltando los aspectos relevantes de los objetos de una clase • Ocultando los detalles particulares de cada objeto • Separaremos el comportamiento de la implementación • Es más importante saber qué se hace en lugar de cómo se hace: Un sensor de temperatura • Se define porque... • mide la temperatura • nos muestra su valor • se puede calibrar... • No sabemos... (no nos importa) • cómo mide la temperatura • de qué está hecho • cómo se calibra
  • 9.
    CONCEPTOS OOP: ABSTRACCIÓN •La abstracción no es única: Un coche puede ser... • Una cosa con ruedas, motor, volante y pedales (conductor) • Algo capaz de transportar personas (taxista) • Una caja que se mueve (simulador de tráfico) • Conjunto de piezas (fabricante)
  • 10.
    CONCEPTOS OOP: ENCAPSULAMIENTO •Ninguna parte de un sistema complejo debe depender de los detalles internos de otra. • Complementa a la abstracción • Se consigue: • Separando la interfaz de su implementación • Ocultando la información interna de un objeto • Escondiendo la estructura e implementación de los métodos (algoritmos). • Exponiendo solo la forma de interactuar con el objeto
  • 11.
    CONCEPTOS OOP: ENCAPSULAMIENTO Vemosque se puede... • Construir con: • 4 puntos (y restricciones) • 1 punto y 2 vectores • 1 punto, 1 vector, 1 ángulo y 1 lado • Transformaciones: • Escalado • Rotación • Desplazamiento • Dibujar No vemos... • Como está representado internamente • 4 puntos? • 1 punto y 2 vectores? • ... • Como se modifica su escala • Guardando el factor? • Escalando en el momento? • Idem para rotación, traslación, etc... Ejemplo: Un paralelogramo
  • 12.
    CONCEPTOS OOP: MODULARIDAD •Consiste en separar el sistema en bloques poco ligados entre sí: módulos. • Organización del código • Es una especie de encapsulamiento de más alto nivel. • El C++ no lo impone aunque lo soporta (namespace) • El Java es más formal (packages) • Difícil pero muy importante en sistemas grandes. • Suele aplicarse refinando el sistema en sucesivas iteraciones • Cada módulo debe definir una interfaz clara
  • 13.
    CONCEPTOS OOP: MODULARIDAD Ejemplo:Simulación detector de AAEE Puede dividirse en los siguientes módulos... 1. Geometría: Describe el detector físicamente (forma, materiales, tamaño) 2. Partículas: Las partículas cuyas interacciones nos interesan 3. Procesos: Aquí enlazamos la información del detector (materia) con las propiedades de las partículas. 4. ... • Podríamos dividir el módulo de procesos en procesos electromagnéticos, procesos hadrónicos, ... • Lo mismo podríamos hacerlo con las partículas: leptones, hadrones, ...
  • 14.
    CONCEPTOS POO: JERARQUÍA •Es una clasificación u ordenamiento de las abstracciones • Hay dos jerarquías fundamentales: • Estructura de clases: • Jerarquía “es un/a” • Relaciones de herencia • Estructura de objetos: • Jerarquía “parte de” • Relaciones de agregación • Está implementada de manera genérica en la estructura de clases
  • 15.
    CONCEPTOS OOP: JERARQUÍA •Una figura plana es: • Algo con una posición en el plano • Escalable • Rotable • Un gráfico es algo que se puede dibujar en 2D • Un diagrama es un conjunto de cuadrados y círculos Herencia simple • Un cuadrado es una figura • Un círculo es una figura Herencia múltiple es una figura es un gráfico Agregación Ejemplo: Figuras planas y diagramas
  • 16.
    CONCEPTOS OOP: TIPO •Es el reforzamiento del concepto de clase • Objetos de tipo diferente no pueden ser intercambiados • El C++ y el Java son lenguajes fuertemente “tipeados” • Ayuda a corregir errores en tiempo de compilación • Mejor que en tiempo de ejecución
  • 17.
    CONCEPTOS OOP: PERSISTENCIA •Propiedad de un objeto de trascender en el tiempo y en el espacio a su creador (programa que lo generó) • No se trata de almacenar sólo el estado de un objeto sino toda la clase (incluido su comportamiento) • No está directamente soportado por el C++ • Existen librerías y sistemas completos (OODBMS) que facilitan la tarea • Frameworks (entornos) como ROOT lo soportan parcialmente (reflex) • El concepto de serialización del Java está directamente relacionado con la persistencia
  • 18.
    RELACIONES • Están presentesen cualquier sistema • Definen como se producen los intercambios de información y datos • También ayudan a comprender las propiedades de unas clases a partir de las propiedades de otras • Existen 4 tipos de relaciones: • Asociación • Herencia • Agregación • Instanciación
  • 19.
    RELACIÓN DE ASOCIACIÓN •Relación más general • Denota una dependencia semántica • Es bidireccional • Primer paso para determinar una relación más compleja Ejemplo: Relación entre un producto y una venta. Cualquier venta está asociada a un producto, pero no es, ni forma parte de, ni posee ningún producto… al menos en una primera aproximación. • Cardinalidad: multiplicidad a cada lado • Uno a uno: Venta-Transacción • Uno a muchos: Producto-Venta • Muchos a muchos: Comprador-Vendedor
  • 20.
    RELACIÓN DE HERENCIA •¡Relación característica de la OOP! • Puede expresar tanto especialización como generalización • Evita definir repetidas veces las características comunes a varias clases • Una de las clases comparte la estructura y/o el comportamiento de otra(s) clase(s). • También se denomina relación “es un/a” (is a)
  • 21.
    RELACIÓN DE HERENCIA(VOCABULARIO) • Clase base o superclase: clase de la cual se hereda • Clase derivada o subclase: clase que hereda • Herencia simple: Hereda de una sola clase • Herencia múltiple: Hereda de varias clases • Java solo la soporta parcialmente • Presenta diversos problemas (¿qué hacer cuando se hereda más de una vez de la misma clase?) • Clase abstracta: La que no lleva, ni puede llevar, ningún objeto asociado • Polimorfismo: Posibilidad de usar indistintamente todos los objetos de un clase y derivadas.
  • 22.
    RELACIÓN DE HERENCIA(EJEMPLO) Figura plana Triángulo Rectángulo Equilátero Escaleno Isósceles Cuadrado Polimorfismo Clase abstracta Superclase Subclase Herencia simple
  • 23.
    RELACIÓN DE AGREGACIÓN •Una clase contiene a otra clase • Ésta “es parte de” aquélla. • También se denomina relación “es parte de” (has a) • Una clase puede contener a otra: • Por valor: Cuando los objetos de la clase contenida se crean y destruyen al mismo tiempo que los de la clase continente • Por referencia: Cuando no necesariamente ocurre lo anterior
  • 24.
    RELACIÓN DE AGREGACIÓN Uncoche está hecho de • Volante • Palanca de cambio • Motor • Ruedas Ruedas Volante Marchas Motor Coche
  • 25.
    RELACIÓN DE INSTANCIACIÓN •En determinados casos una clase (p.ej. un vector) puede implementarse independientemente del tipo (real, complejo, color...) de alguno de sus atributos: • Definimos una clase parametrizada o template (plantilla) • Para cada uno de los tipos que necesitemos definimos una nueva clase  Instanciación Tipo Vector VectorEnteros <int> VectorColores <Color>
  • 26.
    REPRESENTACIONES GRÁFICAS • Nossirven para comunicarnos con otros usuarios o desarrolladores. • Documentan nuestro sistema • Hay múltiples vistas y tipos de diagramas: • Estáticos • Diagramas de clases  Los de los ejemplos • Diagramas de objetos • ... • Dinámicos: • Diagramas de estado: Muestra el ciclo de vida de los objetos, sistemas, etc... • Diagramas secuenciales: Muestra como los objetos interaccionan entre ellos • ...
  • 27.
    DIAGRAMA DE ESTADO:UN ASCENSOR En el primer piso Subiendo Bajando al primer piso Bajando Parado subir llegué llegué subir bajar time-out llegué
  • 28.
  • 29.
    INTRODUCCIÓN • Entender elconcepto de clase • Trabajar con clases • Uso de miembros compartidos • Herencia, polimorfismo y espacios de nombres Debug and Deploy Escribir Código Acceso a datos Uso de Visual Studio .NET Depurar e implantar Crear Interfaz
  • 30.
    LECCIÓN: ENTENDER ELCONCEPTO DE CLASE
  • 31.
    • Una clasees una estructura preliminar que describe un objeto y define atributos y operaciones para el objeto • Las clases utilizan abstracción para poner a disposición únicamente los elementos esenciales que definen el objeto • Las clases utilizan encapsulación para garantizar que se cumple una abstracción ¿QUÉ ES UNA CLASE? Lo que ve el usuario: Lo que está encapsulado: //verify language //authenticate PIN //validate account bal //adjust account bal
  • 32.
    ¿QUÉ ES UNOBJETO? • Un objeto es una instancia de una clase • Los objetos tienen las siguientes cualidades: • Identidad: los objetos se distinguen uno de otro • Comportamiento: los objetos pueden realizar tareas • Estado: los objetos almacenan información que puede cambiar con el tiempo 123 245 12 245 Objet o Objet o Clase
  • 33.
    CÓMO UTILIZAR ELEXAMINADOR DE OBJETOS Panel Objetos Panel Miembros Panel Descripción
  • 34.
    LECCIÓN: TRABAJAR CONCLASES • Cómo crear una nueva clase • Cómo agregar miembros de datos de una instancia • Cómo agregar métodos • Cómo agregar propiedades • Cómo crear una instancia de una clase • Cómo utilizar los constructores • Cómo utilizar los destructores
  • 35.
    CÓMO CREAR UNANUEVA CLASE • Crear una nueva clase utilizando el comando Agregar clase del menú Proyecto • Ejemplo de una nueva clase denominada BankAccount: Public Class Class1 End Class Public Class BankAccount End Class
  • 36.
    CÓMO AGREGAR MIEMBROSDE DATOS DE UNA INSTANCIA  Agregar un miembro de datos denominado balance Public Class BankAccount Private balance As Double End Class Palabra clave Definición Public Accesible en todas partes Private Accesible sólo en el propio tipo Protected Accesible sólo por clases que heredan de la clase
  • 37.
    CÓMO AGREGAR MÉTODOS Agregar un método denominado Deposit Public Class BankAccount Private balance As Double Public Sub Deposit(ByVal amount As Double) balance += amount End Sub End Class  Métodos sobrecargados: dos o más métodos con el mismo nombre pero diferentes firmas Ejemplo: MessageBox.Show
  • 38.
     Agregar unapropiedad: CÓMO AGREGAR PROPIEDADES Public Class BankAccount Private customerName As String Public Property Name( ) As String Get Return customerName End Get Set(ByVal Value As String) customerName = Value End Set End Property End Class
  • 39.
    CÓMO CREAR UNAINSTANCIA DE UNA CLASE • Uso de la palabra clave New para crear una instancia de la clase BankAccount: Module Bank Sub Main Dim account As New BankAccount( ) account.Deposit(500.00) End Sub End Module
  • 40.
    PRÁCTICA: CREACIÓN DEUNA CLASE • En esta práctica, crearemos una clase BankAccount con métodos y propiedades
  • 41.
    CÓMO UTILIZAR LOSCONSTRUCTORES • Ejecutan código cuando el objeto está instanciado Public Sub New(ByVal i As Integer) ' Overloaded without Overloads keyword ' Perform more complex initialization value = i End Sub  Pueden sobrecargarse, pero no utilizan la palabra clave Overloads Public Sub New( ) ' Perform simple initialization value = 1 End Sub
  • 42.
    CÓMO UTILIZAR LOS DESTRUCTORES •Se utilizan para eliminar recursos • Se invocan por el entorno de ejecución antes de destruir el objeto • Importante: es posible que la destrucción no se produzca de modo inmediato Protected Overrides Sub Finalize( ) ' Can close connections or other resources conn.Close End Sub
  • 43.
    LECCIÓN: USO DEMIEMBROS COMPARTIDOS • Cómo utilizar miembros de datos compartidos • Cómo utilizar métodos compartidos
  • 44.
    CÓMO UTILIZAR LOSMIEMBROS DE DATOS COMPARTIDOS • Los miembros de datos compartidos permiten que múltiples instancias hagan referencia a una única variable de nivel de clase SavingsAccount.InterestRate = 0.03 Class SavingsAccount Public Shared InterestRate As Double Public Name As String, Balance As Double . . . End Class
  • 45.
    CÓMO UTILIZAR LOSMÉTODOS COMPARTIDOS • Pueden utilizarse sin declarar una instancia de una clase • Únicamente pueden acceder a datos compartidos ' TestClass code Public Shared Function GetComputerName( ) As String ... End Function ' Client code MessageBox.Show(TestClass.GetComputerName( ))
  • 46.
    PRÁCTICA: CREACIÓN DEMÉTODOS COMPARTIDOS • En esta práctica, • Crearemos una clase • Agregaremos métodos compartidos • Utilizaremos métodos compartidos
  • 47.
    LECCIÓN: HERENCIA, POLIMORFISMOY ESPACIOS DE NOMBRES
  • 48.
    ¿QUÉ ES LAHERENCIA?  La herencia especifica una relación “es un tipo de”  Múltiples clases comparten los mismos atributos y operaciones, permitiendo una eficaz reutilización del código  Ejemplos:  Un cliente “es un tipo de” persona  Un empleado “es un tipo de” persona Cliente Empleado Persona Clase base Clases derivadas
  • 49.
    CÓMO HEREDAR DEUNA CLASE • Una clase derivada hereda de una clase base • Pueden heredarse propiedades, métodos, miembros de datos, eventos y controladores de eventos (dependiendo del ámbito) • Palabras clave • Inherits: hereda de una clase base • NotInheritable: no es heredable • MustInherit: no pueden crearse instancias de la clase; debe ser heredada como una clase base
  • 50.
    ¿QUÉ ES ELPOLIMORFISMO? • El nombre del método reside en la clase base • Las implementaciones del método residen en las clases derivadas BaseTax CalculateTax( ) CountyTax CalculateTax( ) CityTax CalculateTax( )
  • 51.
    COMPARACIÓN ENTRE CLASESY ESTRUCTURAS Clases Estructuras Pueden definir miembros de datos, propiedades y métodos Pueden definir miembros de datos, propiedades y métodos Soportan constructores e inicialización de miembros Sin constructor predeterminado ni inicialización de miembros Soportan el método Finalize No soportan el método Finalize Extensibles por herencia No soportan herencia Tipo Referencia Tipo Valor
  • 52.
    CÓMO ORGANIZAR CLASESEN ESPACIOS DE NOMBRES • Los espacios de nombres son un sistema organizativo • Los espacios de nombres proporcionan nombres cualificados para las clases • Ejemplo: System.Windows.Forms.Button • Para importar un espacio de nombres: • A nivel de proyecto, agregar una referencia a la DLL que contiene el espacio de nombres • Utilizar la palabra clave Imports