SlideShare une entreprise Scribd logo
1  sur  45
Programación
Orientada a Objetos
Jose Emilio Labra Gayo
Depto. Informática
Universidad de Oviedo
Contenidos
Conceptos de POO
Objetos
Clases
Métodos
Encapsulación
Polimorfismo
Lenguajes dinámicos y multiparadigma
Tipos dinámicos y Duck typing
Funciones lambda y de orden superior
Comparación entre lenguajes
Resolución de problemas
Principios de diseño OO: SOLID
Diseño basado en pruebas y comportamiento
Lenguajes de Programación
Lenguaje de programación = herramienta de comunicación
Humano transmite un programa a un computador
Audiencia del programa: Computadores y otros humanos
Programa Computador
Programador
Computador
Usuario/cliente
jefe proyecto
Programador
Programador
Equipo externo
Lenguaje = solución compromiso
Audiencia: Computadores - Humanos
001010000100
100010010010
010000010001
Formato ideal Formato ideal
El texto en lenguaje
natural es el formato
ideal para tí...
public class Country
implements Comparable<Country> {
private String name;
public Country(String name) {
this.name = name;
}
Lenguaje = herramienta
Un problema se resuelve bien con un lenguaje
...pero otro problema puede resolverse major con otro
¿Búsqueda de lenguaje universal?
Lenguaje = comunicación
Aspectos lingüísticos
Sintaxis:
Relación de los símbolos entre sí
Ejemplo: ; al final de una sentencia
Semántica ó Significado
Relación de símbolos con los objetos a los que se aplican
Comportamiento del lenguaje: ¿qué hace el programa?
Pragmático:
Relación de los signos con sus intérpretes (usuarios)
Herramientas de desarrollo (IDEs, depuradores, ...)
Estilos de codificación, idiomas, patrones,...
Familias de lenguajes (paradigmas)
Estructurados
C, Pascal
Orientados a Objetos
C++, Java, C#, Ruby, Python, Scala
Funcionales
Haskell, F#, Scala
Basados en programación lógica
Prolog
...
Imperativos
Basados en máquina de Von Neumann
Un estado que puede modificarse
Estado: Variables almacenan valores en celdas
Asignaciones destructivas
x = x + 1
Estructurados
Evolución de los lenguajes imperativos
Objetivo: Evitar uso de GOTO
Estructuras de control: bucles, condicionales,...
Procedimientos/funciones
Ejemplos: Pascal, C
Orientados a Objetos
Concepto de objeto
Contiene un estado interno (encapsulación)
Envía mensajes a otros objetos
Otros conceptos:
Clases (generadores de objetos)
Herencia (reutilización de código)
Ejemplos: Java, Python, Ruby
Funcionales
Concepto de función
Toma unos parámetros y devuelve un valor
Transparencia referencial
No efectos laterales
function suma(a,b) = a + b
function fact(n) = if n == 0 then 1
else n * fact(n - 1)
x = suma(2,fact(5)) # 122
Funcionales
Funciones como elementos de primera clase
Pueden pasarse como argumentos, asignarse a
variables, etc.
Lenguajes funcionales puros: Haskell
Híbridos OO y funcionales: Scala
function aplica2(f,x) = f (f x)
function suma3(x) = x + 3
x = aplica2(suma3,5) # 11
Evolución Lenguajes POO
1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015
Simula 67 C++
LISP
ALGOL CImperativos
Orientados
a Objetos
Funcionales
PASCAL
Lógicos
C#Java
Python
Haskell Scala
Erlang
Smalltalk
Ruby
Perl
PHP Hack
Javascript
Schema
Prolog
FORTRAN
COBOL
Clojure
F#
Groovy
Swift
Objecttive-C
Go
Modula
Dart
Procesamiento de lenguajes
Interprete
Analiza el programa y lo ejecuta directamente
Compilador
Analiza el programa y lo transforma
Normalmente, genera programa ejecutable
Comprensible por una máquina (virtual o concreta)
Ventajas:
puede optimizarse el código
pueden detectarse errores en el programa
Tiempo compilación vs ejecución
Programador
Programa
Compilador
Datos
entrada
Código
Ejecutable
Salida
tiempo de
compilación
tiempo de
ejecución
Máquina
Usuario
Tipo
Conjunto de operaciones que soporta un valor
Chequeo de tipos
Estático: En tiempo de compilación
Dinámico: En tiempo de ejecución
Tipos como contratos
El tipo permite saber qué operaciones soporta
Puede ayudar a detectar errores de tipos
El compilador puede optimizar el código
Seguridad de tipos
No pedir una operación a un valor que no la soporta
Ejemplo:
x = 4 + "Hola"
print x # TypeError
Tipos estáticos vs dinámicos
Chequeo de tipos puede ser:
Estático: detecta errores en tiempo compilación
Ventajas: posibilidad de optimización, seguridad
Dinámico: detecta errores en tiempo de ejecución
Ventajas: mayor flexibilidad
http://stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languages
http://www.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems/
Categorías de tipos
Tipos definidos por el usuario
Ejemplo: Persona, Asignatura,...
Tipos primitivos: predefinidos por el sistema
Ejemplos: int, float, boolean...
En algunos lenguajes tienen tratamiento diferente
Corresponden con tipos básicos de un computador
Mayor eficiencia
En otros lenguajes son igual que el resto
Para el programador son igual que el resto de tipos
El compilador intenta detectarlos y optimizar el código
Elección de lenguajes
Múltiples factores
Paradigma: OO, functional, lógico, concurrente, ...
Implementación: Compilado, interpretado, VM
Tipos: Dinámico, estático, híbrido
Plataformas: crossplatform vs específico
Concurrencia/paralelismo
Entornos de desarrollo
...
Criterios de elección
Concisión notacional: debe permitir describir algoritmos con el nivel de detalle
adecuado.
Integridad conceptual: contiene conjunto de conceptos simple, claro y unificado.
Ortogonalidad: Características independientes pueden ser comprendidas y
combinadas de forma independiente.
Generalidad: Todas las características son generadas a partir de conceptos básicos
Abstracción: Evitar que algo deba ser enunciado más de una vez
Extensibilidad: Admitir la creación de nuevas características no previstas
Seguridad: Existen medios para comprobar que los programas no contienen errores
Automatización: Pueden automatizarse tareas mecánicas, tediosas o susceptibles de
errores
Portabilidad: Los programas funcionan en diferentes máquinas y clases de máquinas
Eficiencia: Buen rendimiento tanto del programa ejecutándose como del
procesador del lenguaje
Entorno: Factores externos como entorno de desarrollo,
documentación, ejemplos, programadores, etc.
Referencia: tesis doctoral. Labra, 2001
Lenguajes en la asignatura
Python
Tipos dinámicos, Orientado a Objetos
Ruby
Tipos dinámicos, Orientado a Objetos puro
PHP
Tipos dinámicos, Orientado a Objetos
Scala
Tipos estáticos, Funcional y Orientado a Objetos
Desarrolladores multilingües
Ventajas de conocer más de un lenguaje
Muchos lenguajes son similares
Identificar conceptos comunes
Identificar diferencias
Adaptarse a cambios
¿Cuál será el lenguaje más popular dentro de 20 años?
Desarrollos políglotas
Varios lenguajes coexisten en 1 proyecto
Programación Orientada a
Objetos
Definiciones generales
Objetos
Objeto: Estado interno + Métodos
Estado interno: No accesible desde exterior
Métodos: Operaciones que manipulan el estado
Un objeto puede:
Enviar mensajes a otros objetos
Invocar método de otro objeto: obj.método
Referirse a sí mismo
Variable self ó this
Ejemplo de objeto
juan =
object
[ state: nombre: "Juan Manuel", edad: 34
, methods:
crece(): self.edad = self.getEdad() + 1
másViejo(otro) = self.edad > otro.getEdad()
getEdad(): self.edad
]
juan.crece()
print juan.getEdad() # 35
Encapsulación
Estado del objeto no accesible desde el exterior
Solamente a través de métodos
Tipos de métodos:
Lectura: No modifican el estado del objeto
Ejemplo: getEdad
Escritura: Pueden modificar el estado del objeto
Ejemplo: crece
Clases
Clase: Plantilla que permite generar objetos
Atributos (campos comunes)
Definición de métodos communes
Método especial: new
Genera objetos (= instancias de la clase)
Atributos  variables de instancia
NOTA
El concepto de clase no es estrictamente necesario en programación orientada a objetos.
Algunos lenguajes como Self ó Javascript utilizan prototipos.
En otros lenguajes como Ruby, Python las clases son también objetos
Ejemplo de clase
Persona = class
[ atributes: nombre, edad
, methods:
crece(): self.edad = self.getEdad() + 1
másViejo(otro) = self.edad > otro.getEdad()
getEdad(): self.edad
new(n,e): self.nombre = n, self.edad = e
]
juan = Persona.new("Juan Manuel", 34)
juan.crece()
print juan.getEdad() # 35
pepe = Persona.new("Jose Luis", 22)
print juan.másViejo(pepe) # true
Clase ≠ Tipo
Clase = plantilla para generar un objeto
Tipo = conjunto de operaciones de un objeto
En algunos lenguajes un objeto puede soportar más
operaciones que las definidas en una clase
Herencia
Una subclase hereda de otra (superclase)
Subclase hereda los campos y métodos de superclase
Añade otros campos y métodos
Posibilidad: Redefinir métodos de la superclase
Superclase
Subclase
Relación is-a
Representación en UML
Ejemplo de herencia
Usuario = class extends Persona
[ atributes: email
, methods:
login(email): self.email == email
new(n,e,em): super.new(n,e), email = em
]
luis = Usuario.new("Luis", 15, "luis@example.com")
luis.crece()
print getEdad(luis) # 16
Polimorfismo
Una expression toma valores de un tipo
...pero admite valores de todos los subtipos
juan = Persona.new("Juan", 15)
luis = Usuario.new("Luis", 34, "luis@example.com")
print puedeVotar(juan) # false
print puedeVotar(luis) # true
puedeVotar(persona) = persona.getEdad() > 18
El Sistema admite valores de tipo Persona, pero también de cualquier subtipo (Usuarios)
Clases abstractas
No permiten generar instancias
Su único propósito es que sean derivadas
Persona = abstract class
[ ... ]
Usuario = class extends Persona
[ ... ]
luis = Usuario.new("Luis", 34, "luis@example.com") # OK
juan = Persona.new("Juan", 15) # Error
Niveles de acceso
Permite delimitar qué campos internos son
accesibles
private: no son accesibles
protected: accesibles a las subclases
public: son accesibles
Herencia simple/múltiple
Herencia simple:
Una clase sólo puede heredar de una superclase
Herencia múltiple
Una clase puede heredar de varias superclass
Problema del diamante
Estudiante
Becario
Empleado
Persona
Alternativas a Herencia múltiple
Relación "can-act-as"
Posibilidades:
Interfaces: Métodos sin comportamiento
Traits/mixins: Métodos con comportamiento
Interfaces
Solamente signatura de los métodos
Sin implementación
Signatura:
Nombre del método
Aridad (nº de argumentos)
Tipos de los argumentos
Una clase implementa un interfaz
Interfaz
Clase
Ejemplo de Interfaz
Saludador = interface
[ methods:
saluda(msg: string)
]
juan = Persona.new("Juan", 34)
juan.saluda("¿Qué tal?") # Hola: ¿Qué tal?
Persona = class implements Saludador
[ atributes: nombre, edad
, methods:
saluda(msg): print "¡Hola! " + msg
...
]
Traits (rasgos)
Interfaces que pueden incluir implementaciones
PHP, Scala: traits
Ruby: mediante módulos (mixins)
Facilitan reutilización de comportamiento
Una clase incluye un trait
Relación "includes"
Ejemplo con traits
Saludador = trait
[ methods:
saluda(msg: string) { print "Hola: " + msg }
]
juan = Persona.new("Juan", 34)
juan.saluda("¿Qué tal?") # Hola: ¿Qué tal?
Persona = class includes Saludador
[ atributes: nombre, edad
, methods:
...
]
Métodos ó atributos estáticos
Métodos/atributos asociados a una clase
Forman parte de la clase, no de los objetos de esa clase
Son globales
La clase actúa como una etiqueta
Peligros asociados a variables/procedimientos globales
Ejemplo con atributo estático
Persona = class
[ static: contadorPersonas = 0
, atributes: nombre, edad
, methods:
crece(): self.edad = self.getEdad() + 1
másViejo(otro) = self.edad > otro.getEdad()
getEdad(): self.edad
new(n,e):
contadorPersonas = contadorPersonas + 1
self.nombre = n, self.edad = e
]
juan = Persona.new("Juan", 34)
print Persona.contadorPersonas # 1
Modularización y
espacios de nombres
Programas grandes deben descomponerse
Minimizar colisiones de nombres
Módulo = conjunto de definiciones
Identificado con un nombre
Facilita el desarrollo independiente
Relaciones entre módulos
Qué definiciones se importan/exportan
Visibilidad de las definiciones
Facilidades para modificar definiciones importadas
Ejemplo de módulo
Universidad = module
[ import Persona
, class Profesor
...
, class Estudiante
...
, ...
]
import Universidad
pepe = Universidad::Profesor.new("Jose", 34)

Contenu connexe

Tendances (20)

Introduccion a python 3
Introduccion a python 3Introduccion a python 3
Introduccion a python 3
 
Sistema Operativo Ghost
Sistema Operativo GhostSistema Operativo Ghost
Sistema Operativo Ghost
 
Publicación de páginas web
Publicación de páginas webPublicación de páginas web
Publicación de páginas web
 
Desarrollo web
Desarrollo webDesarrollo web
Desarrollo web
 
PHP
PHPPHP
PHP
 
Form Handling using PHP
Form Handling using PHPForm Handling using PHP
Form Handling using PHP
 
Sistema de-maquina-virtual
Sistema de-maquina-virtualSistema de-maquina-virtual
Sistema de-maquina-virtual
 
Javascript para principiantes -Introducción
Javascript para principiantes -IntroducciónJavascript para principiantes -Introducción
Javascript para principiantes -Introducción
 
Estilos y paradigmas de la Interacción Humano-Computador
Estilos y paradigmas de la Interacción Humano-ComputadorEstilos y paradigmas de la Interacción Humano-Computador
Estilos y paradigmas de la Interacción Humano-Computador
 
Presentación PSeInt
Presentación PSeIntPresentación PSeInt
Presentación PSeInt
 
Programación modular estructurada.ppt
Programación modular estructurada.pptProgramación modular estructurada.ppt
Programación modular estructurada.ppt
 
php
phpphp
php
 
Tablas html
Tablas htmlTablas html
Tablas html
 
Unidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacionUnidad 3 topicos avanzados de programacion
Unidad 3 topicos avanzados de programacion
 
Java script(diapositivas)
Java script(diapositivas) Java script(diapositivas)
Java script(diapositivas)
 
Programacion Funcional
Programacion FuncionalProgramacion Funcional
Programacion Funcional
 
Programación de aplicaciones móviles
Programación de aplicaciones móvilesProgramación de aplicaciones móviles
Programación de aplicaciones móviles
 
El diseño web
El diseño webEl diseño web
El diseño web
 
Lenguaje PHP
Lenguaje PHPLenguaje PHP
Lenguaje PHP
 
Introduccion a la programacion web
Introduccion a la programacion webIntroduccion a la programacion web
Introduccion a la programacion web
 

En vedette

Informe mantenimiento mecanico
Informe mantenimiento mecanicoInforme mantenimiento mecanico
Informe mantenimiento mecanicoJDPVasquez
 
Proyectos_de_innovacion
Proyectos_de_innovacionProyectos_de_innovacion
Proyectos_de_innovacionWebMD
 
Error messages
Error messagesError messages
Error messagesrtinkelman
 
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpiGfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpilisbet bravo
 
Análisis situacional integral de salud final
 Análisis situacional integral de salud final Análisis situacional integral de salud final
Análisis situacional integral de salud finalEstefanía Echeverría
 
JULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJulio Pari
 
El emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional certEl emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional certMaestros Online
 
1ºBACH Economía Tema 5 Oferta y demanda
1ºBACH Economía Tema 5 Oferta y demanda1ºBACH Economía Tema 5 Oferta y demanda
1ºBACH Economía Tema 5 Oferta y demandaGeohistoria23
 
Onderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitiefOnderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitiefrloggen
 
Como hacer un plan de negocios
Como hacer un plan de negociosComo hacer un plan de negocios
Como hacer un plan de negociosXPINNERPablo
 
Schrijven voor het web
Schrijven voor het webSchrijven voor het web
Schrijven voor het webSimone Levie
 
Estrategias competitivas básicas
Estrategias competitivas básicasEstrategias competitivas básicas
Estrategias competitivas básicasLarryJimenez
 
Capitulo 2 Libro de Innovación en América Latina
Capitulo 2 Libro de Innovación en América LatinaCapitulo 2 Libro de Innovación en América Latina
Capitulo 2 Libro de Innovación en América LatinaInnovare
 

En vedette (20)

pronostico de venta
pronostico de ventapronostico de venta
pronostico de venta
 
Informe mantenimiento mecanico
Informe mantenimiento mecanicoInforme mantenimiento mecanico
Informe mantenimiento mecanico
 
Proyectos_de_innovacion
Proyectos_de_innovacionProyectos_de_innovacion
Proyectos_de_innovacion
 
Componentes de un Plan de Negocios
Componentes de un Plan de NegociosComponentes de un Plan de Negocios
Componentes de un Plan de Negocios
 
Error messages
Error messagesError messages
Error messages
 
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpiGfpi f-019 guia de aprendizaje 01 tda orientar fpi
Gfpi f-019 guia de aprendizaje 01 tda orientar fpi
 
Análisis situacional integral de salud final
 Análisis situacional integral de salud final Análisis situacional integral de salud final
Análisis situacional integral de salud final
 
JULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de Negocios
 
PMP Sonora Saludable 2010 2015
PMP Sonora Saludable 2010   2015  PMP Sonora Saludable 2010   2015
PMP Sonora Saludable 2010 2015
 
El emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional certEl emprendedor y el empresario profesional cert
El emprendedor y el empresario profesional cert
 
1ºBACH Economía Tema 5 Oferta y demanda
1ºBACH Economía Tema 5 Oferta y demanda1ºBACH Economía Tema 5 Oferta y demanda
1ºBACH Economía Tema 5 Oferta y demanda
 
Tears In The Rain
Tears In The RainTears In The Rain
Tears In The Rain
 
Onderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitiefOnderzoeksrapport acrs v3.0_definitief
Onderzoeksrapport acrs v3.0_definitief
 
Como hacer un plan de negocios
Como hacer un plan de negociosComo hacer un plan de negocios
Como hacer un plan de negocios
 
Schrijven voor het web
Schrijven voor het webSchrijven voor het web
Schrijven voor het web
 
Estrategias competitivas básicas
Estrategias competitivas básicasEstrategias competitivas básicas
Estrategias competitivas básicas
 
Cápsula 1. estudios de mercado
Cápsula 1. estudios de mercadoCápsula 1. estudios de mercado
Cápsula 1. estudios de mercado
 
Rodriguez alvarez
Rodriguez alvarezRodriguez alvarez
Rodriguez alvarez
 
Fichero de actividades
Fichero de actividadesFichero de actividades
Fichero de actividades
 
Capitulo 2 Libro de Innovación en América Latina
Capitulo 2 Libro de Innovación en América LatinaCapitulo 2 Libro de Innovación en América Latina
Capitulo 2 Libro de Innovación en América Latina
 

Similaire à POO Conceptos Claves

Programacion
ProgramacionProgramacion
Programacionedison
 
Evoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýnEvoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýnJana EstRada JacoBo
 
Programación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a ObjetosProgramación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a Objetosanytrix
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacionhundertaker46
 
FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
 FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEBMaria_carvajal
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programaciónfarmero
 
Clasificasion de lenguajes
Clasificasion de lenguajesClasificasion de lenguajes
Clasificasion de lenguajesdomynicjorge
 
Portafolio de evidencias actividades
Portafolio de evidencias actividadesPortafolio de evidencias actividades
Portafolio de evidencias actividadesJames Logan
 
Paradigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a ObjetosParadigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a ObjetosAlberto Blumberg
 

Similaire à POO Conceptos Claves (20)

Programacion
ProgramacionProgramacion
Programacion
 
Programaciòn
ProgramaciònProgramaciòn
Programaciòn
 
Eli rodas
Eli rodasEli rodas
Eli rodas
 
Evoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýnEvoluciýýn de la programaciýýn
Evoluciýýn de la programaciýýn
 
Arquitectura de Computadoras
Arquitectura de Computadoras Arquitectura de Computadoras
Arquitectura de Computadoras
 
Clasificacion
ClasificacionClasificacion
Clasificacion
 
POO
POOPOO
POO
 
Tarea3
Tarea3 Tarea3
Tarea3
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Programación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a ObjetosProgramación Orientada a Objetos Programación Orientada a Objetos
Programación Orientada a Objetos Programación Orientada a Objetos
 
Clase02 paradigmas
Clase02 paradigmasClase02 paradigmas
Clase02 paradigmas
 
Lenguajes de programacion
Lenguajes de programacionLenguajes de programacion
Lenguajes de programacion
 
FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
 FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
FUNDAMENTOS DE PROGRAMACIÓN EN DISEÑO WEB
 
Correa correa juan_felipe
Correa correa juan_felipeCorrea correa juan_felipe
Correa correa juan_felipe
 
Lenguajes de programación
Lenguajes de programaciónLenguajes de programación
Lenguajes de programación
 
Clasificasion de lenguajes
Clasificasion de lenguajesClasificasion de lenguajes
Clasificasion de lenguajes
 
Exposicion
ExposicionExposicion
Exposicion
 
Portafolio de evidencias actividades
Portafolio de evidencias actividadesPortafolio de evidencias actividades
Portafolio de evidencias actividades
 
Paradigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a ObjetosParadigma de Programación Orientado a Objetos
Paradigma de Programación Orientado a Objetos
 
Consulta c++
Consulta c++Consulta c++
Consulta c++
 

Plus de Jose Emilio Labra Gayo

Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctoradoJose Emilio Labra Gayo
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapesJose Emilio Labra Gayo
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data qualityJose Emilio Labra Gayo
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesJose Emilio Labra Gayo
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesJose Emilio Labra Gayo
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosJose Emilio Labra Gayo
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorJose Emilio Labra Gayo
 

Plus de Jose Emilio Labra Gayo (20)

Publicaciones de investigación
Publicaciones de investigaciónPublicaciones de investigación
Publicaciones de investigación
 
Introducción a la investigación/doctorado
Introducción a la investigación/doctoradoIntroducción a la investigación/doctorado
Introducción a la investigación/doctorado
 
Challenges and applications of RDF shapes
Challenges and applications of RDF shapesChallenges and applications of RDF shapes
Challenges and applications of RDF shapes
 
Legislative data portals and linked data quality
Legislative data portals and linked data qualityLegislative data portals and linked data quality
Legislative data portals and linked data quality
 
Validating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectivesValidating RDF data: Challenges and perspectives
Validating RDF data: Challenges and perspectives
 
Wikidata
WikidataWikidata
Wikidata
 
Legislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologiesLegislative document content extraction based on Semantic Web technologies
Legislative document content extraction based on Semantic Web technologies
 
ShEx by Example
ShEx by ExampleShEx by Example
ShEx by Example
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
Introducción a la Web Semántica
Introducción a la Web SemánticaIntroducción a la Web Semántica
Introducción a la Web Semántica
 
RDF Data Model
RDF Data ModelRDF Data Model
RDF Data Model
 
2017 Tendencias en informática
2017 Tendencias en informática2017 Tendencias en informática
2017 Tendencias en informática
 
RDF, linked data and semantic web
RDF, linked data and semantic webRDF, linked data and semantic web
RDF, linked data and semantic web
 
Introduction to SPARQL
Introduction to SPARQLIntroduction to SPARQL
Introduction to SPARQL
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Como publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazadosComo publicar datos: hacia los datos abiertos enlazados
Como publicar datos: hacia los datos abiertos enlazados
 
16 Alternativas XML
16 Alternativas XML16 Alternativas XML
16 Alternativas XML
 
XSLT
XSLTXSLT
XSLT
 
XPath
XPathXPath
XPath
 
Arquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el ServidorArquitectura de la Web y Computación en el Servidor
Arquitectura de la Web y Computación en el Servidor
 

Dernier

Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingKevinCabrera96
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxJuanPablo452634
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfMikkaelNicolae
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCarlosGabriel96
 
osciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdfosciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdfIvanRetambay
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptCRISTOFERSERGIOCANAL
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfdanielJAlejosC
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfannavarrom
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrialGibranDiaz7
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILProblemSolved
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMarceloQuisbert6
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaAlexanderimanolLencr
 
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesElianaCceresTorrico
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdfvictoralejandroayala2
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfbcondort
 

Dernier (20)

Principales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards DemingPrincipales aportes de la carrera de William Edwards Deming
Principales aportes de la carrera de William Edwards Deming
 
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptxProcesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
Procesos-de-la-Industria-Alimentaria-Envasado-en-la-Produccion-de-Alimentos.pptx
 
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdfReporte de simulación de flujo del agua en un volumen de control MNVA.pdf
Reporte de simulación de flujo del agua en un volumen de control MNVA.pdf
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
 
osciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdfosciloscopios Mediciones Electricas ingenieria.pdf
osciloscopios Mediciones Electricas ingenieria.pdf
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.pptaCARGA y FUERZA UNI 19 marzo 2024-22.ppt
aCARGA y FUERZA UNI 19 marzo 2024-22.ppt
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdf
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdfSesión N°2_Curso_Ingeniería_Sanitaria.pdf
Sesión N°2_Curso_Ingeniería_Sanitaria.pdf
 
desarrollodeproyectoss inge. industrial
desarrollodeproyectoss  inge. industrialdesarrollodeproyectoss  inge. industrial
desarrollodeproyectoss inge. industrial
 
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVILClase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
Clase 7 MECÁNICA DE FLUIDOS 2 INGENIERIA CIVIL
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
Magnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principiosMagnetismo y electromagnetismo principios
Magnetismo y electromagnetismo principios
 
Tinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiologíaTinciones simples en el laboratorio de microbiología
Tinciones simples en el laboratorio de microbiología
 
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotencialesUNIDAD 3 ELECTRODOS.pptx para biopotenciales
UNIDAD 3 ELECTRODOS.pptx para biopotenciales
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
tema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdftema05 estabilidad en barras mecanicas.pdf
tema05 estabilidad en barras mecanicas.pdf
 
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdfLA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
LA APLICACIÓN DE LAS PROPIEDADES TEXTUALES A LOS TEXTOS.pdf
 

POO Conceptos Claves

  • 1. Programación Orientada a Objetos Jose Emilio Labra Gayo Depto. Informática Universidad de Oviedo
  • 2. Contenidos Conceptos de POO Objetos Clases Métodos Encapsulación Polimorfismo Lenguajes dinámicos y multiparadigma Tipos dinámicos y Duck typing Funciones lambda y de orden superior Comparación entre lenguajes Resolución de problemas Principios de diseño OO: SOLID Diseño basado en pruebas y comportamiento
  • 3. Lenguajes de Programación Lenguaje de programación = herramienta de comunicación Humano transmite un programa a un computador Audiencia del programa: Computadores y otros humanos Programa Computador Programador Computador Usuario/cliente jefe proyecto Programador Programador Equipo externo
  • 4. Lenguaje = solución compromiso Audiencia: Computadores - Humanos 001010000100 100010010010 010000010001 Formato ideal Formato ideal El texto en lenguaje natural es el formato ideal para tí... public class Country implements Comparable<Country> { private String name; public Country(String name) { this.name = name; }
  • 5. Lenguaje = herramienta Un problema se resuelve bien con un lenguaje ...pero otro problema puede resolverse major con otro ¿Búsqueda de lenguaje universal?
  • 6. Lenguaje = comunicación Aspectos lingüísticos Sintaxis: Relación de los símbolos entre sí Ejemplo: ; al final de una sentencia Semántica ó Significado Relación de símbolos con los objetos a los que se aplican Comportamiento del lenguaje: ¿qué hace el programa? Pragmático: Relación de los signos con sus intérpretes (usuarios) Herramientas de desarrollo (IDEs, depuradores, ...) Estilos de codificación, idiomas, patrones,...
  • 7. Familias de lenguajes (paradigmas) Estructurados C, Pascal Orientados a Objetos C++, Java, C#, Ruby, Python, Scala Funcionales Haskell, F#, Scala Basados en programación lógica Prolog ...
  • 8. Imperativos Basados en máquina de Von Neumann Un estado que puede modificarse Estado: Variables almacenan valores en celdas Asignaciones destructivas x = x + 1
  • 9. Estructurados Evolución de los lenguajes imperativos Objetivo: Evitar uso de GOTO Estructuras de control: bucles, condicionales,... Procedimientos/funciones Ejemplos: Pascal, C
  • 10. Orientados a Objetos Concepto de objeto Contiene un estado interno (encapsulación) Envía mensajes a otros objetos Otros conceptos: Clases (generadores de objetos) Herencia (reutilización de código) Ejemplos: Java, Python, Ruby
  • 11. Funcionales Concepto de función Toma unos parámetros y devuelve un valor Transparencia referencial No efectos laterales function suma(a,b) = a + b function fact(n) = if n == 0 then 1 else n * fact(n - 1) x = suma(2,fact(5)) # 122
  • 12. Funcionales Funciones como elementos de primera clase Pueden pasarse como argumentos, asignarse a variables, etc. Lenguajes funcionales puros: Haskell Híbridos OO y funcionales: Scala function aplica2(f,x) = f (f x) function suma3(x) = x + 3 x = aplica2(suma3,5) # 11
  • 13. Evolución Lenguajes POO 1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015 Simula 67 C++ LISP ALGOL CImperativos Orientados a Objetos Funcionales PASCAL Lógicos C#Java Python Haskell Scala Erlang Smalltalk Ruby Perl PHP Hack Javascript Schema Prolog FORTRAN COBOL Clojure F# Groovy Swift Objecttive-C Go Modula Dart
  • 14. Procesamiento de lenguajes Interprete Analiza el programa y lo ejecuta directamente Compilador Analiza el programa y lo transforma Normalmente, genera programa ejecutable Comprensible por una máquina (virtual o concreta) Ventajas: puede optimizarse el código pueden detectarse errores en el programa
  • 15. Tiempo compilación vs ejecución Programador Programa Compilador Datos entrada Código Ejecutable Salida tiempo de compilación tiempo de ejecución Máquina Usuario
  • 16. Tipo Conjunto de operaciones que soporta un valor Chequeo de tipos Estático: En tiempo de compilación Dinámico: En tiempo de ejecución
  • 17. Tipos como contratos El tipo permite saber qué operaciones soporta Puede ayudar a detectar errores de tipos El compilador puede optimizar el código Seguridad de tipos No pedir una operación a un valor que no la soporta Ejemplo: x = 4 + "Hola" print x # TypeError
  • 18. Tipos estáticos vs dinámicos Chequeo de tipos puede ser: Estático: detecta errores en tiempo compilación Ventajas: posibilidad de optimización, seguridad Dinámico: detecta errores en tiempo de ejecución Ventajas: mayor flexibilidad http://stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languages http://www.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems/
  • 19. Categorías de tipos Tipos definidos por el usuario Ejemplo: Persona, Asignatura,... Tipos primitivos: predefinidos por el sistema Ejemplos: int, float, boolean... En algunos lenguajes tienen tratamiento diferente Corresponden con tipos básicos de un computador Mayor eficiencia En otros lenguajes son igual que el resto Para el programador son igual que el resto de tipos El compilador intenta detectarlos y optimizar el código
  • 20. Elección de lenguajes Múltiples factores Paradigma: OO, functional, lógico, concurrente, ... Implementación: Compilado, interpretado, VM Tipos: Dinámico, estático, híbrido Plataformas: crossplatform vs específico Concurrencia/paralelismo Entornos de desarrollo ...
  • 21. Criterios de elección Concisión notacional: debe permitir describir algoritmos con el nivel de detalle adecuado. Integridad conceptual: contiene conjunto de conceptos simple, claro y unificado. Ortogonalidad: Características independientes pueden ser comprendidas y combinadas de forma independiente. Generalidad: Todas las características son generadas a partir de conceptos básicos Abstracción: Evitar que algo deba ser enunciado más de una vez Extensibilidad: Admitir la creación de nuevas características no previstas Seguridad: Existen medios para comprobar que los programas no contienen errores Automatización: Pueden automatizarse tareas mecánicas, tediosas o susceptibles de errores Portabilidad: Los programas funcionan en diferentes máquinas y clases de máquinas Eficiencia: Buen rendimiento tanto del programa ejecutándose como del procesador del lenguaje Entorno: Factores externos como entorno de desarrollo, documentación, ejemplos, programadores, etc. Referencia: tesis doctoral. Labra, 2001
  • 22. Lenguajes en la asignatura Python Tipos dinámicos, Orientado a Objetos Ruby Tipos dinámicos, Orientado a Objetos puro PHP Tipos dinámicos, Orientado a Objetos Scala Tipos estáticos, Funcional y Orientado a Objetos
  • 23. Desarrolladores multilingües Ventajas de conocer más de un lenguaje Muchos lenguajes son similares Identificar conceptos comunes Identificar diferencias Adaptarse a cambios ¿Cuál será el lenguaje más popular dentro de 20 años? Desarrollos políglotas Varios lenguajes coexisten en 1 proyecto
  • 25. Objetos Objeto: Estado interno + Métodos Estado interno: No accesible desde exterior Métodos: Operaciones que manipulan el estado Un objeto puede: Enviar mensajes a otros objetos Invocar método de otro objeto: obj.método Referirse a sí mismo Variable self ó this
  • 26. Ejemplo de objeto juan = object [ state: nombre: "Juan Manuel", edad: 34 , methods: crece(): self.edad = self.getEdad() + 1 másViejo(otro) = self.edad > otro.getEdad() getEdad(): self.edad ] juan.crece() print juan.getEdad() # 35
  • 27. Encapsulación Estado del objeto no accesible desde el exterior Solamente a través de métodos Tipos de métodos: Lectura: No modifican el estado del objeto Ejemplo: getEdad Escritura: Pueden modificar el estado del objeto Ejemplo: crece
  • 28. Clases Clase: Plantilla que permite generar objetos Atributos (campos comunes) Definición de métodos communes Método especial: new Genera objetos (= instancias de la clase) Atributos  variables de instancia NOTA El concepto de clase no es estrictamente necesario en programación orientada a objetos. Algunos lenguajes como Self ó Javascript utilizan prototipos. En otros lenguajes como Ruby, Python las clases son también objetos
  • 29. Ejemplo de clase Persona = class [ atributes: nombre, edad , methods: crece(): self.edad = self.getEdad() + 1 másViejo(otro) = self.edad > otro.getEdad() getEdad(): self.edad new(n,e): self.nombre = n, self.edad = e ] juan = Persona.new("Juan Manuel", 34) juan.crece() print juan.getEdad() # 35 pepe = Persona.new("Jose Luis", 22) print juan.másViejo(pepe) # true
  • 30. Clase ≠ Tipo Clase = plantilla para generar un objeto Tipo = conjunto de operaciones de un objeto En algunos lenguajes un objeto puede soportar más operaciones que las definidas en una clase
  • 31. Herencia Una subclase hereda de otra (superclase) Subclase hereda los campos y métodos de superclase Añade otros campos y métodos Posibilidad: Redefinir métodos de la superclase Superclase Subclase Relación is-a Representación en UML
  • 32. Ejemplo de herencia Usuario = class extends Persona [ atributes: email , methods: login(email): self.email == email new(n,e,em): super.new(n,e), email = em ] luis = Usuario.new("Luis", 15, "luis@example.com") luis.crece() print getEdad(luis) # 16
  • 33. Polimorfismo Una expression toma valores de un tipo ...pero admite valores de todos los subtipos juan = Persona.new("Juan", 15) luis = Usuario.new("Luis", 34, "luis@example.com") print puedeVotar(juan) # false print puedeVotar(luis) # true puedeVotar(persona) = persona.getEdad() > 18 El Sistema admite valores de tipo Persona, pero también de cualquier subtipo (Usuarios)
  • 34. Clases abstractas No permiten generar instancias Su único propósito es que sean derivadas Persona = abstract class [ ... ] Usuario = class extends Persona [ ... ] luis = Usuario.new("Luis", 34, "luis@example.com") # OK juan = Persona.new("Juan", 15) # Error
  • 35. Niveles de acceso Permite delimitar qué campos internos son accesibles private: no son accesibles protected: accesibles a las subclases public: son accesibles
  • 36. Herencia simple/múltiple Herencia simple: Una clase sólo puede heredar de una superclase Herencia múltiple Una clase puede heredar de varias superclass Problema del diamante Estudiante Becario Empleado Persona
  • 37. Alternativas a Herencia múltiple Relación "can-act-as" Posibilidades: Interfaces: Métodos sin comportamiento Traits/mixins: Métodos con comportamiento
  • 38. Interfaces Solamente signatura de los métodos Sin implementación Signatura: Nombre del método Aridad (nº de argumentos) Tipos de los argumentos Una clase implementa un interfaz Interfaz Clase
  • 39. Ejemplo de Interfaz Saludador = interface [ methods: saluda(msg: string) ] juan = Persona.new("Juan", 34) juan.saluda("¿Qué tal?") # Hola: ¿Qué tal? Persona = class implements Saludador [ atributes: nombre, edad , methods: saluda(msg): print "¡Hola! " + msg ... ]
  • 40. Traits (rasgos) Interfaces que pueden incluir implementaciones PHP, Scala: traits Ruby: mediante módulos (mixins) Facilitan reutilización de comportamiento Una clase incluye un trait Relación "includes"
  • 41. Ejemplo con traits Saludador = trait [ methods: saluda(msg: string) { print "Hola: " + msg } ] juan = Persona.new("Juan", 34) juan.saluda("¿Qué tal?") # Hola: ¿Qué tal? Persona = class includes Saludador [ atributes: nombre, edad , methods: ... ]
  • 42. Métodos ó atributos estáticos Métodos/atributos asociados a una clase Forman parte de la clase, no de los objetos de esa clase Son globales La clase actúa como una etiqueta Peligros asociados a variables/procedimientos globales
  • 43. Ejemplo con atributo estático Persona = class [ static: contadorPersonas = 0 , atributes: nombre, edad , methods: crece(): self.edad = self.getEdad() + 1 másViejo(otro) = self.edad > otro.getEdad() getEdad(): self.edad new(n,e): contadorPersonas = contadorPersonas + 1 self.nombre = n, self.edad = e ] juan = Persona.new("Juan", 34) print Persona.contadorPersonas # 1
  • 44. Modularización y espacios de nombres Programas grandes deben descomponerse Minimizar colisiones de nombres Módulo = conjunto de definiciones Identificado con un nombre Facilita el desarrollo independiente Relaciones entre módulos Qué definiciones se importan/exportan Visibilidad de las definiciones Facilidades para modificar definiciones importadas
  • 45. Ejemplo de módulo Universidad = module [ import Persona , class Profesor ... , class Estudiante ... , ... ] import Universidad pepe = Universidad::Profesor.new("Jose", 34)