SlideShare a Scribd company logo
1 of 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)

More Related Content

What's hot

Búsqueda Primero el Mejor
Búsqueda Primero el MejorBúsqueda Primero el Mejor
Búsqueda Primero el Mejor
Tutor4uDev
 
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito deterministaClase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito determinista
mvagila
 
Conceptos y protocolos de enrutamiento: 9. EIGRP
Conceptos y protocolos de enrutamiento: 9. EIGRPConceptos y protocolos de enrutamiento: 9. EIGRP
Conceptos y protocolos de enrutamiento: 9. EIGRP
Francesc Perez
 
Lenguajes libre de contexto
Lenguajes libre de contextoLenguajes libre de contexto
Lenguajes libre de contexto
Verónica Es'Loo
 

What's hot (20)

Búsqueda Primero el Mejor
Búsqueda Primero el MejorBúsqueda Primero el Mejor
Búsqueda Primero el Mejor
 
2 modelos de la ingenieria de software
2  modelos de la ingenieria de software2  modelos de la ingenieria de software
2 modelos de la ingenieria de software
 
Gramática Libre de Contexto
Gramática Libre de ContextoGramática Libre de Contexto
Gramática Libre de Contexto
 
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...Conceptos Unidad 1 Lenguajes Automatas Introducción  a  la Teoría de Lenguaje...
Conceptos Unidad 1 Lenguajes Automatas Introducción a la Teoría de Lenguaje...
 
Tabla De Transicion
Tabla De TransicionTabla De Transicion
Tabla De Transicion
 
Elementos de diagramas de secuencias
Elementos de diagramas de secuenciasElementos de diagramas de secuencias
Elementos de diagramas de secuencias
 
Clase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito deterministaClase4: Transformación desde Expresión regular a Autómata finito determinista
Clase4: Transformación desde Expresión regular a Autómata finito determinista
 
Conceptos y protocolos de enrutamiento: 9. EIGRP
Conceptos y protocolos de enrutamiento: 9. EIGRPConceptos y protocolos de enrutamiento: 9. EIGRP
Conceptos y protocolos de enrutamiento: 9. EIGRP
 
Tipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacionTipos de gramatica y arboles de derivacion
Tipos de gramatica y arboles de derivacion
 
Generador de codigo intermedio
Generador de codigo intermedioGenerador de codigo intermedio
Generador de codigo intermedio
 
Lenguaje ensamblador
Lenguaje ensambladorLenguaje ensamblador
Lenguaje ensamblador
 
Procesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o HebrasProcesos Ligeros: Hilos o Hebras
Procesos Ligeros: Hilos o Hebras
 
Estructura de datos
Estructura de datosEstructura de datos
Estructura de datos
 
Lenguajes libre de contexto
Lenguajes libre de contextoLenguajes libre de contexto
Lenguajes libre de contexto
 
Manejo de memoria
Manejo de memoriaManejo de memoria
Manejo de memoria
 
Generación código intermedio 2
Generación código intermedio 2Generación código intermedio 2
Generación código intermedio 2
 
Código intermedio
Código intermedioCódigo intermedio
Código intermedio
 
Jerarquia de chomsky
Jerarquia de chomskyJerarquia de chomsky
Jerarquia de chomsky
 
Comandos c#
Comandos c#Comandos c#
Comandos c#
 
Tabla de símbolos
Tabla de símbolosTabla de símbolos
Tabla de símbolos
 

Viewers also liked

Error messages
Error messagesError messages
Error messages
rtinkelman
 
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
lisbet bravo
 
JULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de NegociosJULIOPARI - Elaborando un Plan de Negocios
JULIOPARI - Elaborando un Plan de Negocios
Julio Pari
 
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
Geohistoria23
 

Viewers also liked (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
 

Similar to 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos

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
Maria_carvajal
 
Clasificasion de lenguajes
Clasificasion de lenguajesClasificasion de lenguajes
Clasificasion de lenguajes
domynicjorge
 

Similar to 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos (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
 
Lenguaje de programacion
Lenguaje de programacionLenguaje de programacion
Lenguaje de programacion
 
Tarea3
Tarea3 Tarea3
Tarea3
 
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++
 

More from Jose Emilio Labra Gayo

More from 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
 

Recently uploaded

tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa maria
susafy7
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
gustavoiashalom
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
evercoyla
 

Recently uploaded (20)

Controladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y VentajasControladores Lógicos Programables Usos y Ventajas
Controladores Lógicos Programables Usos y Ventajas
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
 
Determinación de espacios en la instalación
Determinación de espacios en la instalaciónDeterminación de espacios en la instalación
Determinación de espacios en la instalación
 
ingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptxingenieria grafica para la carrera de ingeniera .pptx
ingenieria grafica para la carrera de ingeniera .pptx
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
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
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica
 
tesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa mariatesis maíz univesidad catolica santa maria
tesis maíz univesidad catolica santa maria
 
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
ANALISIS Y DISEÑO POR VIENTO, DE EDIFICIOS ALTOS, SEGUN ASCE-2016, LAURA RAMIREZ
 
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERUQUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
QUIMICA GENERAL UNIVERSIDAD TECNOLOGICA DEL PERU
 
Presentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptxPresentación Instrumentos de Medicion Electricos.pptx
Presentación Instrumentos de Medicion Electricos.pptx
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
 
libro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operacioneslibro de ingeniería de petróleos y operaciones
libro de ingeniería de petróleos y operaciones
 
Six Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo processSix Sigma Process and the dmaic metodo process
Six Sigma Process and the dmaic metodo process
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdfDISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
DISEÑO PAVIMENTOS CLASE 06 PAVIMENTOS.pdf
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 

1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos

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