1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos
-
Upload
jose-emilio-labra-gayo -
Category
Engineering
-
view
511 -
download
1
Transcript of 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos
![Page 1: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/1.jpg)
Programación Orientada a Objetos
Jose Emilio Labra GayoDepto. Informática
Universidad de Oviedo
![Page 2: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/2.jpg)
ContenidosConceptos de POO
ObjetosClasesMétodosEncapsulaciónPolimorfismo
Lenguajes dinámicos y multiparadigmaTipos dinámicos y Duck typingFunciones lambda y de orden superior
Comparación entre lenguajesResolución de problemasPrincipios de diseño OO: SOLID
Diseño basado en pruebas y comportamiento
![Page 3: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/3.jpg)
Lenguajes de ProgramaciónLenguaje de programación = herramienta de comunicación
Humano transmite un programa a un computadorAudiencia del programa: Computadores y otros humanos
Programa Computador
Programador
Computador
Usuario/cliente
jefe proyecto
ProgramadorProgramador
Equipo externo
![Page 4: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/4.jpg)
Lenguaje = solución compromiso
Audiencia: Computadores - Humanos
001010000100100010010010010000010001
Formato ideal Formato idealEl 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;}
![Page 5: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/5.jpg)
Lenguaje = herramienta
Un problema se resuelve bien con un lenguaje...pero otro problema puede resolverse major con otro
¿Búsqueda de lenguaje universal?
![Page 6: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/6.jpg)
Lenguaje = comunicación
Aspectos lingüísticosSintaxis:
Relación de los símbolos entre síEjemplo: ; al final de una sentencia
Semántica ó SignificadoRelación de símbolos con los objetos a los que se aplicanComportamiento 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,...
![Page 7: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/7.jpg)
Familias de lenguajes (paradigmas)
EstructuradosC, Pascal
Orientados a ObjetosC++, Java, C#, Ruby, Python, Scala
FuncionalesHaskell, F#, Scala
Basados en programación lógicaProlog
...
![Page 8: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/8.jpg)
Imperativos
Basados en máquina de Von NeumannUn estado que puede modificarse Estado: Variables almacenan valores en celdasAsignaciones destructivas
x = x + 1
![Page 9: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/9.jpg)
Estructurados
Evolución de los lenguajes imperativosObjetivo: Evitar uso de GOTOEstructuras de control: bucles, condicionales,...Procedimientos/funcionesEjemplos: Pascal, C
![Page 10: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/10.jpg)
Orientados a Objetos
Concepto de objetoContiene 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
![Page 11: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/11.jpg)
Funcionales
Concepto de funciónToma unos parámetros y devuelve un valor
Transparencia referencialNo efectos laterales
function suma(a,b) = a + bfunction fact(n) = if n == 0 then 1 else n * fact(n - 1)x = suma(2,fact(5)) # 122
![Page 12: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/12.jpg)
Funcionales
Funciones como elementos de primera clasePueden pasarse como argumentos, asignarse a variables, etc.
Lenguajes funcionales puros: HaskellHíbridos OO y funcionales: Scala
function aplica2(f,x) = f (f x)function suma3(x) = x + 3
x = aplica2(suma3,5) # 11
![Page 13: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/13.jpg)
Evolución Lenguajes POO
1955 1960 1965 1970 1975 1980 1985 1990 1995 2000 2005 2010 2015
Simula 67 C++
LISP
ALGOL CImperativos
Orientadosa Objetos
Funcionales
PASCAL
Lógicos
C#Java
Python
Haskell ScalaErlang
Smalltalk
Ruby
Perl PHP Hack
Javascript
Schema
Prolog
FORTRANCOBOL
ClojureF#
Groovy
SwiftObjecttive-C
Go
Modula
Dart
![Page 14: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/14.jpg)
Procesamiento de lenguajes
InterpreteAnaliza el programa y lo ejecuta directamente
CompiladorAnaliza el programa y lo transforma Normalmente, genera programa ejecutable
Comprensible por una máquina (virtual o concreta)
Ventajas: puede optimizarse el códigopueden detectarse errores en el programa
![Page 15: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/15.jpg)
Tiempo compilación vs ejecución
Programador
Programa
Compilador
Datos entrada
CódigoEjecutable
Salida
tiempo de compilación
tiempo de ejecución
Máquina
Usuario
![Page 16: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/16.jpg)
Tipo
Conjunto de operaciones que soporta un valorChequeo de tipos
Estático: En tiempo de compilaciónDinámico: En tiempo de ejecución
![Page 17: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/17.jpg)
Tipos como contratos
El tipo permite saber qué operaciones soportaPuede ayudar a detectar errores de tiposEl compilador puede optimizar el código
Seguridad de tiposNo pedir una operación a un valor que no la soportaEjemplo:
x = 4 + "Hola"print x # TypeError
![Page 18: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/18.jpg)
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ónVentajas: mayor flexibilidad
http://stackoverflow.com/questions/125367/dynamic-type-languages-versus-static-type-languageshttp://www.smashingmagazine.com/2013/04/18/introduction-to-programming-type-systems/
![Page 19: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/19.jpg)
Categorías de tipos
Tipos definidos por el usuarioEjemplo: Persona, Asignatura,...
Tipos primitivos: predefinidos por el sistemaEjemplos: int, float, boolean...En algunos lenguajes tienen tratamiento diferente
Corresponden con tipos básicos de un computadorMayor eficiencia
En otros lenguajes son igual que el restoPara el programador son igual que el resto de tiposEl compilador intenta detectarlos y optimizar el código
![Page 20: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/20.jpg)
Elección de lenguajes
Múltiples factoresParadigma: OO, functional, lógico, concurrente, ...Implementación: Compilado, interpretado, VMTipos: Dinámico, estático, híbridoPlataformas: crossplatform vs específicoConcurrencia/paralelismoEntornos de desarrollo...
![Page 21: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/21.jpg)
Criterios de elecciónConcisió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ásicosAbstracción: Evitar que algo deba ser enunciado más de una vezExtensibilidad: Admitir la creación de nuevas características no previstasSeguridad: Existen medios para comprobar que los programas no contienen erroresAutomatización: Pueden automatizarse tareas mecánicas, tediosas o susceptibles de erroresPortabilidad: Los programas funcionan en diferentes máquinas y clases de máquinasEficiencia: Buen rendimiento tanto del programa ejecutándose como del procesador del lenguajeEntorno: Factores externos como entorno de desarrollo, documentación, ejemplos, programadores, etc.
Referencia: tesis doctoral. Labra, 2001
![Page 22: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/22.jpg)
Lenguajes en la asignatura
PythonTipos dinámicos, Orientado a Objetos
RubyTipos dinámicos, Orientado a Objetos puro
PHPTipos dinámicos, Orientado a Objetos
ScalaTipos estáticos, Funcional y Orientado a Objetos
![Page 23: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/23.jpg)
Desarrolladores multilingües
Ventajas de conocer más de un lenguajeMuchos lenguajes son similares
Identificar conceptos comunesIdentificar diferencias
Adaptarse a cambios¿Cuál será el lenguaje más popular dentro de 20 años?
Desarrollos políglotasVarios lenguajes coexisten en 1 proyecto
![Page 24: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/24.jpg)
Programación Orientada a Objetos
Definiciones generales
![Page 25: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/25.jpg)
Objetos
Objeto: Estado interno + MétodosEstado interno: No accesible desde exteriorMétodos: Operaciones que manipulan el estado
Un objeto puede: Enviar mensajes a otros objetos
Invocar método de otro objeto: obj.métodoReferirse a sí mismo
Variable self ó this
![Page 26: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/26.jpg)
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
![Page 27: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/27.jpg)
Encapsulación
Estado del objeto no accesible desde el exteriorSolamente a través de métodosTipos de métodos:
Lectura: No modifican el estado del objetoEjemplo: getEdad
Escritura: Pueden modificar el estado del objetoEjemplo: crece
![Page 28: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/28.jpg)
Clases
Clase: Plantilla que permite generar objetosAtributos (campos comunes)Definición de métodos communes
Método especial: newGenera objetos (= instancias de la clase)Atributos variables de instancia
NOTAEl 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
![Page 29: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/29.jpg)
Ejemplo de clasePersona = 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
![Page 30: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/30.jpg)
Clase ≠ Tipo
Clase = plantilla para generar un objetoTipo = conjunto de operaciones de un objeto
En algunos lenguajes un objeto puede soportar más operaciones que las definidas en una clase
![Page 31: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/31.jpg)
Herencia
Una subclase hereda de otra (superclase)Subclase hereda los campos y métodos de superclaseAñade otros campos y métodosPosibilidad: Redefinir métodos de la superclase
Superclase
Subclase
Relación is-a
Representación en UML
![Page 32: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/32.jpg)
Ejemplo de herenciaUsuario = 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, "[email protected]")luis.crece()print getEdad(luis) # 16
![Page 33: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/33.jpg)
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, "[email protected]")print puedeVotar(juan) # falseprint puedeVotar(luis) # true
puedeVotar(persona) = persona.getEdad() > 18
El Sistema admite valores de tipo Persona, pero también de cualquier subtipo (Usuarios)
![Page 34: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/34.jpg)
Clases abstractas
No permiten generar instanciasSu único propósito es que sean derivadas
Persona = abstract class [ ... ]Usuario = class extends Persona [ ... ]
luis = Usuario.new("Luis", 34, "[email protected]") # OKjuan = Persona.new("Juan", 15) # Error
![Page 35: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/35.jpg)
Niveles de acceso
Permite delimitar qué campos internos son accesiblesprivate: no son accesibles protected: accesibles a las subclasespublic: son accesibles
![Page 36: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/36.jpg)
Herencia simple/múltiple
Herencia simple: Una clase sólo puede heredar de una superclase
Herencia múltipleUna clase puede heredar de varias superclassProblema del diamante
Estudiante
Becario
Empleado
Persona
![Page 37: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/37.jpg)
Alternativas a Herencia múltiple
Relación "can-act-as"Posibilidades:
Interfaces: Métodos sin comportamientoTraits/mixins: Métodos con comportamiento
![Page 38: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/38.jpg)
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
![Page 39: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/39.jpg)
Ejemplo de InterfazSaludador = 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 ... ]
![Page 40: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/40.jpg)
Traits (rasgos)
Interfaces que pueden incluir implementacionesPHP, Scala: traits Ruby: mediante módulos (mixins)
Facilitan reutilización de comportamientoUna clase incluye un trait
Relación "includes"
![Page 41: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/41.jpg)
Ejemplo con traitsSaludador = 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: ... ]
![Page 42: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/42.jpg)
Métodos ó atributos estáticos
Métodos/atributos asociados a una claseForman parte de la clase, no de los objetos de esa clase
Son globalesLa clase actúa como una etiquetaPeligros asociados a variables/procedimientos globales
![Page 43: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/43.jpg)
Ejemplo con atributo estáticoPersona = 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
![Page 44: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/44.jpg)
Modularización y espacios de nombres
Programas grandes deben descomponerseMinimizar colisiones de nombresMódulo = conjunto de definiciones
Identificado con un nombreFacilita el desarrollo independienteRelaciones entre módulos
Qué definiciones se importan/exportanVisibilidad de las definicionesFacilidades para modificar definiciones importadas
![Page 45: 1 Introducción a los Lenguajes de Programación y a la Programación Orientada a Objetos](https://reader034.fdocuments.mx/reader034/viewer/2022050719/587bac331a28ab81758b7023/html5/thumbnails/45.jpg)
Ejemplo de móduloUniversidad = module [ import Persona , class Profesor ... , class Estudiante ... , ... ]
import Universidadpepe = Universidad::Profesor.new("Jose", 34)