Download Tema 1

Document related concepts

Scala (lenguaje de programación) wikipedia , lookup

Dylan (lenguaje de programación) wikipedia , lookup

Ocaml wikipedia , lookup

Oz (lenguaje de programación) wikipedia , lookup

Polimorfismo (informática) wikipedia , lookup

Transcript
Tema 1
Introducción al paradigma de programación
orientado a objetos
Programación Orientada a Objetos
Curso 2013/2014
Contenido
Paradigmas de programación vs. Lenguajes de
programación.
Evolución de los lenguajes de programación.
Lenguajes de programación orientados a objetos (LPOO).
Características del lenguaje Java.
Características del paradigma de programación
orientado a objetos
Calidad del Software.
Curso 2013/2014
Programación Orientada a Objetos
2
Evolución de los lenguajes de programación
La evolución de los lenguajes de programación
está ligada al crecimiento de la complejidad de
las aplicaciones.
Adaptación a las nuevas aplicaciones y a la
mejora de la capacidad de procesamiento del
hardware.
La forma de programar se acerca más a los
conceptos del dominio de la aplicación
(abstracción).
Curso 2013/2014
Programación Orientada a Objetos
3
Paradigmas de programación
Paradigma de programación:
Colección de conceptos que guían el proceso de
construcción de un programa, determinando su
estructura.
Estos conceptos controlan la forma en que pensamos y
formulamos los programas.
Un lenguaje de programación refleja un
paradigma.
Paradigma de programación
Lenguaje de programación
Imperativo
Pascal, C, …
Orientado a Objetos
Java, C++, C#, …
Curso 2013/2014
Programación Orientada a Objetos
4
Evolución de los lenguajes OO
Simula (1964):
Comienzo de la OO.
Se utilizaba como lenguaje de simulación.
Ha influido en el desarrollo de otros lenguajes OO.
Smalltalk (1972):
Basado en Simula.
Define los principios del paradigma OO:
Todo es un objeto.
Los objetos que se comunican mediante mensajes.
Todo objeto es creado a partir de una clase (tipo).
Encapsulación del comportamiento asociado a un tipo.
Las clases se organizan en jerarquías de herencia.
Curso 2013/2014
Programación Orientada a Objetos
5
Lenguajes OO – Años 80
Popularidad de los lenguajes OO.
C++ (1985):
Extensión de C con características OO.
Muy popular, ayudó a difundir la POO.
Eiffel (1985):
Bertrand Meyer
Lenguaje orientado a objetos puro.
Fruto de un profundo estudio del paradigma OO.
Lenguaje “teórico” poco utilizado.
Curso 2013/2014
Programación Orientada a Objetos
6
Lenguajes OO – Años 90
Java (1995):
Sun Microsystems.
Lenguaje OO puro.
Se popularizó por su uso en la web.
Actualmente soporta una extensa plataforma de
desarrollo de software (numerosas bibliotecas de
código).
C# (2000):
Combina C++ y Java.
Integrado en la plataforma .NET de Microsoft.
Curso 2013/2014
Programación Orientada a Objetos
7
Características del lenguaje Java
Sencillo:
La sintaxis de Java es muy parecida a C++
Elimina las características de C++ más complejas, por
ejemplo, punteros.
Orientado a Objetos:
A diferencia de C++, es un lenguaje OO puro.
Las capacidades OO son similares a las de C++.
Curso 2013/2014
Programación Orientada a Objetos
8
Características del lenguaje Java
Independiente de la plataforma de ejecución:
El compilador Java genera código intermedio
(bytecodes) independiente de la plataforma.
Los bytecodes son interpretados por la máquina virtual
de Java.
El código compilado se puede ejecutar en muchas
plataformas (Windows, Linux, Mac, etc.) siempre y
cuando cuenten con el entorno de ejecución de Java
(incluye la máquina virtual)
La tecnología de implementación
(compilador+intérprete) hace que el código Java sea
portable.
Curso 2013/2014
Programación Orientada a Objetos
9
Características del lenguaje Java
Robusto:
Lenguaje fuertemente tipado
Mecanismo de excepciones
El compilador detecta muchos problemas que, en otros
lenguajes, aparecerían en tiempo de ejecución.
Gestión de errores en tiempo de ejecución
Elimina los errores derivados de una mala gestión de
memoria
Mecanismo de “recogida de basura”
Elimina la gestión de punteros.
Curso 2013/2014
Programación Orientada a Objetos
10
Orientación a Objetos
Técnica de programación que organiza el
software como una colección de objetos que
colaboran para realizar la funcionalidad de un
sistema.
Curso 2013/2014
Programación Orientada a Objetos
11
Orientación a Objetos
Nuevo enfoque de programación centrado en los
conceptos (abstracciones) del dominio de la aplicación.
Estrategia de desarrollo: el software se organiza en
torno a los módulos que son deducidos de los tipos de
objetos del dominio de la aplicación.
Diferencia con el paradigma imperativo:
Centrado en las funciones, qué hace el sistema, en
lugar de quién lo hace.
Estrategia de desarrollo: refinamiento por pasos
sucesivos.
Curso 2013/2014
Programación Orientada a Objetos
12
Desarrollo Orientado a Objetos
Identificar los objetos relevantes al problema.
Describir los tipos de objetos y su propiedades.
Encontrar las operaciones para los tipos de
objetos.
Identificar relaciones entre objetos.
Utilizar los tipos de objetos y relaciones para
estructurar el software.
Curso 2013/2014
Programación Orientada a Objetos
13
Ejemplo: Objeto Coche
Tiene las propiedades:
•Color
•Velocidad
•Carburante
Operaciones que puede realizar:
•Mover
•Parar
•Girar a la derecha
•Girar a la izquierda
•Arrancar
Curso 2013/2014
Programación Orientada a Objetos
14
Clases de objetos
Los objetos con propiedades similares y el mismo
comportamiento se agrupan en clases.
Curso 2013/2014
Programación Orientada a Objetos
15
Clase Coche
Coche
color
velocidad
carburante
mover()
parar()
girarDerecha()
girarIzquierda()
arrancar()
Curso 2013/2014
Programación Orientada a Objetos
16
Relaciones entre objetos
A es un cliente de B si
todo objeto de A puede
contener información
sobre uno o más objetos
de B.
B hereda de A si
B representa una versión
especializada de A
Curso 2013/2014
Programación Orientada a Objetos
17
Relación de clientela
• Una persona tiene información sobre el
coche que posee.
Curso 2013/2014
Programación Orientada a Objetos
18
Relación de herencia
Turismo ES UN Coche.
Turismo es una especialización de Coche que
tiene nuevas propiedades y funcionalidad.
Curso 2013/2014
Programación Orientada a Objetos
19
Comunicación entre objetos
Objetos se comunican mediante paso de mensajes
Curso 2013/2014
Programación Orientada a Objetos
20
Calidad del software
La ingeniería del software tiene como objetivo la
producción de software de calidad.
La OO se propone como una técnica para
mejorar la calidad del software.
Los datos son más estables que las funciones.
La calidad del software se describe como la
combinación de varios factores internos y
externos.
Curso 2013/2014
Programación Orientada a Objetos
21
Calidad del software
Factores Externos
Factores Internos
Pueden ser detectados por los usuarios
Calidad externa es la que realmente preocupa
Sólo los perciben los diseñadores y programadores
Medio para conseguir la calidad externa
Objetivo:
Buenas propiedades
internas
Curso 2013/2014
Satisfacer factores
externos
Programación Orientada a Objetos
22
Factores Externos
Corrección:
Robustez:
Es la capacidad de los productos software de realizar
con exactitud su tarea (cumplir su especificación).
Es la capacidad de los productos software de
reaccionar adecuadamente ante situaciones
excepcionales.
Extensibilidad:
Es la facilidad de adaptación de los productos
software a los cambios en la especificación.
La dificultad de adaptación es proporcional al tamaño
de la aplicación.
Curso 2013/2014
Programación Orientada a Objetos
23
Factores Externos
Reutilización:
Es la capacidad de un producto software de ser
utilizado en la construcción de diferentes aplicaciones.
Mejora la productividad.
Otros factores:
Eficiencia.
Portabilidad.
Facilidad de uso.
Facilidad reparación de errores.
Curso 2013/2014
Programación Orientada a Objetos
24
Modularidad
Factor interno que contribuye a la calidad del software.
Definición: Propiedad que tiene un sistema que ha sido
descompuesto en un conjunto de módulos cohesivos y
débilmente acoplados.
Alta cohesión:
Módulo con responsabilidades altamente relacionadas y que
no hace gran cantidad de trabajo (módulo especializado).
Bajo acoplamiento:
Un módulo que depende de pocos módulos.
Facilita la comprensión del código.
Limita el impacto de los errores.
Curso 2013/2014
Programación Orientada a Objetos
25
Principios de Diseño Modular
Ocultación de la información:
Consiste en ocultar los detalles de la
implementación al código cliente, reduciendo así el
acoplamiento.
Se seleccionan un conjunto de propiedades que se
hacen públicas a los clientes (interfaz) y se oculta el
resto (implementación).
Principio de Elección Única:
Evitar manejar listas de variantes.
A veces no es evitable. Minimizar los módulos que
conocen la lista de variantes.
Curso 2013/2014
Programación Orientada a Objetos
26
Principios de Diseño Modular
Principio Abierto-Cerrado:
Un módulo está abierto si está disponible para ser
adaptado: añadir o modificar funcionalidad.
Un módulo está cerrado si está disponible para ser
utilizado.
La extensibilidad del código se ve favorecida por
módulos que estén abiertos y cerrados al mismo
tiempo.
Objetivo: extender un módulo sin afectar al código que
ya hacía uso de ese módulo.
Curso 2013/2014
Programación Orientada a Objetos
27
Mantenimiento de software
Fase del ciclo de vida del software que sucede después
de que haya sido entregado.
Corresponde al mayor periodo en la vida de una aplicación
y se estima un coste del 70%.
Tipos de mantenimiento:
Adaptación a cambios en la especificación.
Reparación de errores.
El mantenimiento se ve favorecido por:
Extensibilidad.
Facilidad de reparación de errores.
Reutilización.
Curso 2013/2014
Programación Orientada a Objetos
28
OO y calidad del software
Mantenimiento:
Extensibilidad:
Los objetos (conceptos) de un problema son
entidades más estables que las funciones.
La estructura del software “mimetiza” los conceptos
el dominio de la aplicación.
Reutilización:
La reutilización de código forma parte de los
conceptos básicos de la OO (herencia).
Curso 2013/2014
Programación Orientada a Objetos
29