SlideShare una empresa de Scribd logo
1 de 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)

Más contenido relacionado

La actualidad más candente

Sistema Operativo Linux
Sistema Operativo LinuxSistema Operativo Linux
Sistema Operativo Linux
Diana
 
Fundamentos de Programacion
Fundamentos de ProgramacionFundamentos de Programacion
Fundamentos de Programacion
neyvajms
 
Organización y estructura interna del cpu
Organización y estructura interna del cpuOrganización y estructura interna del cpu
Organización y estructura interna del cpu
Isaí Beto Matz Mijes
 

La actualidad más candente (20)

Modelo de desarrollo concurrente
Modelo de desarrollo concurrenteModelo de desarrollo concurrente
Modelo de desarrollo concurrente
 
Introducción a las Redes WAN
Introducción a las Redes WANIntroducción a las Redes WAN
Introducción a las Redes WAN
 
Estilos de programación y sus lenguajes
Estilos de programación y sus lenguajesEstilos de programación y sus lenguajes
Estilos de programación y sus lenguajes
 
Lenguaje ensamblador
Lenguaje ensamblador   Lenguaje ensamblador
Lenguaje ensamblador
 
Clases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programaciónClases/Tipos de lenguajes de programación
Clases/Tipos de lenguajes de programación
 
Lenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretesLenguajes de programacion tema 2_compiladores e interpretes
Lenguajes de programacion tema 2_compiladores e interpretes
 
UNIDAD 2 PROGRAMACIÓN BASICA
UNIDAD 2 PROGRAMACIÓN BASICAUNIDAD 2 PROGRAMACIÓN BASICA
UNIDAD 2 PROGRAMACIÓN BASICA
 
Diseño de interfaz de usuario
Diseño de interfaz de usuarioDiseño de interfaz de usuario
Diseño de interfaz de usuario
 
Unidad 2 concepto de Programa,Proceso y Procesador
Unidad 2  concepto de Programa,Proceso y ProcesadorUnidad 2  concepto de Programa,Proceso y Procesador
Unidad 2 concepto de Programa,Proceso y Procesador
 
Sistema Operativo Linux
Sistema Operativo LinuxSistema Operativo Linux
Sistema Operativo Linux
 
2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby2 Introducción al lenguaje Ruby
2 Introducción al lenguaje Ruby
 
Paradigmas de la programación
Paradigmas de la programación Paradigmas de la programación
Paradigmas de la programación
 
Diapositivas pseudocodigo
Diapositivas pseudocodigoDiapositivas pseudocodigo
Diapositivas pseudocodigo
 
Lenguajes autómatas.
Lenguajes autómatas.Lenguajes autómatas.
Lenguajes autómatas.
 
Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador   Investigacion sobre traductor, interprete y compilador
Investigacion sobre traductor, interprete y compilador
 
Fundamentos de programación.pptx
Fundamentos de programación.pptxFundamentos de programación.pptx
Fundamentos de programación.pptx
 
Fundamentos de Programacion
Fundamentos de ProgramacionFundamentos de Programacion
Fundamentos de Programacion
 
Introduccion a la programacion
Introduccion a la programacionIntroduccion a la programacion
Introduccion a la programacion
 
Capa de presentación modelo OSI
Capa de presentación modelo OSICapa de presentación modelo OSI
Capa de presentación modelo OSI
 
Organización y estructura interna del cpu
Organización y estructura interna del cpuOrganización y estructura interna del cpu
Organización y estructura interna del cpu
 

Destacado

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
 

Destacado (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 a 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 a 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++
 

Más de Jose Emilio Labra Gayo

Más 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
 

Último

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
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
Ricardo705519
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
BRAYANJOSEPTSANJINEZ
 

Último (20)

Herramientas de la productividad - Revit
Herramientas de la productividad - RevitHerramientas de la productividad - Revit
Herramientas de la productividad - Revit
 
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
 
Clasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docxClasificación de Equipos e Instrumentos en Electricidad.docx
Clasificación de Equipos e Instrumentos en Electricidad.docx
 
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
 
Gestion de proyectos para el control y seguimiento
Gestion de proyectos para el control  y seguimientoGestion de proyectos para el control  y seguimiento
Gestion de proyectos para el control y seguimiento
 
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 ...
 
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICAINTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
INTEGRALES TRIPLES CLASE TEORICA Y PRÁCTICA
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
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
 
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdfTIPOS DE SOPORTES - CLASIFICACION IG.pdf
TIPOS DE SOPORTES - CLASIFICACION IG.pdf
 
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf  PARA TRABAJO SEGUROATS-FORMATO cara.pdf  PARA TRABAJO SEGURO
ATS-FORMATO cara.pdf PARA TRABAJO SEGURO
 
Sesion 6 _ Curso Integrador II_TSZVQJ.pdf
Sesion 6 _ Curso Integrador II_TSZVQJ.pdfSesion 6 _ Curso Integrador II_TSZVQJ.pdf
Sesion 6 _ Curso Integrador II_TSZVQJ.pdf
 
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
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptxNTP- Determinación de Cloruros  en suelos y agregados (1) (1).pptx
NTP- Determinación de Cloruros en suelos y agregados (1) (1).pptx
 
2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica2. Cristaloquimica. ingenieria geologica
2. Cristaloquimica. ingenieria geologica
 
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdfAnálisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
Análisis_y_Diseño_de_Estructuras_con_SAP_2000,_5ta_Edición_ICG.pdf
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.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
 

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)