Publicado el 3 de Julio del 2017
2.957 visualizaciones desde el 3 de Julio del 2017
1,9 MB
49 paginas
Programación Orientada a Objetos
Tema 1: Introducción
Eduardo Mosqueira Rey
LIDIA
Laboratorio de Investigación y
desarrollo en Inteligencia Artificial
Departamento de Computación
Universidade da Coruña, España
Objetivos
• Contextualizar el paradigma de la orientación a
objetos dentro de los distintos paradigmas de
programación existentes.
• Analizar las diferencias metodológicas entre la
programación por descomposición funcional y
la programación orientada a objetos.
• Introducir al alumno en el contexto de los
lenguajes orientados a objetos.
• Conocer la historia y los aspectos básicos tanto
del lenguaje como de la plataforma Java.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
2
Índice
1. Paradigmas de Programación
2. Evolución de los lenguajes imperativos
3. Programación orientada a objetos
4. Lenguajes orientados a objetos
5. Lenguaje Java
6. Bibliografía
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
3
Índice
1. Paradigmas de Programación
– Paradigma operacional
– Paradigma declarativo
– Paradigma demostrativo
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
4
Paradigmas Programación
• Paradigma
– Palabra proveniente del griego paradeigma y cuyo
significado es: modelo o ejemplo representativo.
• Paradigma de Programación
– Colección de patrones conceptuales que juntos
modelan el proceso de diseño y, finalmente,
determinan la estructura del programa.
– Tipos (según Ambler):
• Operacionales
• Declarativos
• Demostrativos
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
5
Paradigmas Programación
Especifican la programación como
un conjunto de secuencias
computacionales que se ejecutan
paso a paso
No existe una descripción paso a
paso de cómo llegar a la solución,
sino que el programa se construye
estableciendo hechos, reglas,
restricciones, ecuaciones, etc. Que
debe cumplir el conjunto de valores
que constituyen la solución.
Paradigma
operacional
Paradigmas de
programación
Paradigma
declarativo
Paradigma
imperativo
Paradigma de orien-
tación a objetos
Paradigma
funcional
Paradigma
lógico
Paradigma
transformacional
Paradigma
relacional
Paradigma
de inducción
Haskell,
Erlang
Prolog
Sistemas
basados en
reglas
SQL
Se provee al sistema de soluciones
a problemas similares y se deja que
generalice una solución a partir de
estos ejemplos.
Paradigma
demostrativo
Paradigma de redes
de neuronas
Paradigma
genético
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
6
Paradigmas Programación
Paradigma Operacional
• Paradigma imperativo (o procedimental)
– Definición
• Son lenguajes centrados en la acción, es decir, la
computación se ve como una secuencia de acciones
(especificadas paso a paso) que convierten los datos de
entrada iniciales en los datos de salida finales.
– Ecuación
• Algoritmos + Estructuras de Datos = Programas
– Lenguajes
• FORTRAN, COBOL, BASIC, C, Ada, Pascal, etc.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
7
Paradigmas Programación
Paradigma Operacional
• Paradigma de la orientación a objetos
– Orígenes
• Evolución natural de los lenguajes que siguen el paradigma
imperativo ⇒ el módulo o tipo abstracto evoluciona al concepto de
objeto.
• Sin embargo, la filosofía de programación difiere del modelo
imperativo
– Definición. La programación consiste en:
• Definir cuáles son los objetos adecuados para resolver un
problema determinado.
• Resolver el problema mediante la interacción entre los distintos
objetos a través del intercambio de mensajes
– Ecuación
– Lenguajes
• Objetos + Mensajes = Programas
• Smalltalk, Eiffel, C++, Java, Object Pascal, etc.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
8
Índice
2. Evolución de los lenguajes imperativos
– Programación no estructurada
– Programación procedimental
– Programación estructurada
– Programación modular
– Tipos abstractos de datos (TADs)
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
9
Evolución Lenguajes
Imperativos
Programación
no estructurada
Programación
procedimental
Programación
estructurada
Procedimientos
Programa
Programa principal
datos
Estructuras
básicas de
diseño
Programa
Programa principal
datos
Procedimiento #1
datos #1
Procedimiento #2
datos #2
Procedimiento #3
datos #3
Procedimiento #1.1
datos #1.1
Procedimiento #1.2
datos #1.2
Procedimiento #3.1
datos #1.3
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
10
Evolución Lenguajes
Imperativos
Programación
no estructurada
Programación
procedimental
Programación
estructurada
Programación
modular
Tipos abstractos
de datos
Programación
orientada objetos
Procedimientos
Estructuras
básicas de
diseño
Encapsulación
en módulos
Instanciación
Herencia,
polimorfismo,
etc.
Programa
Programa principal
datos
Modulo #1
Modulo #2
Parte pública
datos públicos #1
Parte privada
datos privados #1
Procedimiento #1.1
datos #1.1
Procedimiento #1.2
datos #1.2
Parte pública
datos públicos #2
Parte privada
datos privados #2
Procedimiento #2.1
datos #2.1
Procedimiento #2.2
datos #2.2
Programa
Objeto #2
datos #2
Objeto #1
datos #1
Objeto #5
datos #5
Objeto #3
datos #3
Objeto #4
datos #4
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
11
Índice
3. Programación orientada a objetos
– Introducción
– Top-down vs. Bottom-up
– Ventajas de la POO
– Inconvenientes de la POO
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
12
Prog. Orientada a Objetos
Introducción
• Características
– Cambio de notación:
• tipos → clases
• variables → objetos.
– Nuevas características OO no presentes en los TADs
– Las clases pueden establecer relaciones de generalización-
especialización de forma que, implícitamente, las clases
especializadas hereden propiedades de las clases genéricas
• Herencia:
• Polimorfismo:
superclase
– Capacidad de una subclase de actuar como si fuera su
– La nueva filosofía de programación se orienta a la
estructura de los datos en vez de a la estructura de
las funciones
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
13
Prog. Orientada a Objetos
Top-down vs. Bottom-up
• Diseño top-down o descomposición funcional
– Características
• Consiste en ir descomponiendo el programa en piezas más
pequeñas y manejables (subrutinas, funciones o procedimientos).
1
1.1
1.2
1.3
1.2.1
1.2.2
– Problemas
• No favorece la reutilización porque las funciones de más bajo nivel
desarrolladas son muy dependientes del problema que pretenden
resolver y de los datos globales existentes en el programa en el
que se incluyen.
• Se ve muy afectado por cambios en los requisitos funcionales.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
14
Prog. Orientada a Objetos
Top-down vs. Bottom-up
• Diseño Bottom-up
– Filosofía de la orientación a objetos
• Se trata de identificar cómo es la estructura de datos del programa
y qué interacciones aparecen entre los distintos datos.
• A partir de los datos y sus interacciones se desarrollan las
funciones que produzcan las salidas adecuadas
• El programa se compone de una serie de objetos con un estado
interno propio y que interactúan intercambiando mensajes
– Ejemplo
• Para realizar un juego de cartas empezamos realizando los objetos
carta, mazo, tapete, jugador, etc.
• Los objetos se prueban de forma independiente y posteriormente
se integran para formar el juego (bottom-up)
• Los objetos son fácilmente reutilizables para cualquier otro juego
de cartas
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
15
Prog. Orientada a Objetos
Ventajas
• Reutilización
– Los objetos bien diseñados pueden utilizarse como base de
otros sistemas, que se constituyen como una combinación de
los objetos existentes.
• Modularidad
– Los objetos son autocontenidos y tienen definido de forma
clara sus interfaces con otros objetos.
• Comprensión
– Al estar los datos y procedimientos que conforman los objetos
encapsulados en un mismo compartimento, los objetos pueden
ser desarrollados y probados en forma independiente.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
16
Prog. Orientada a Objetos
Ventajas
• Extensibilidad
– La herencia permite que sea posible definir y utilizar de forma
clara módulos funcionalmente incompletos y, luego, permiten
su extensión sin trastornar la operación de los módulos cliente.
• Escalabilidad
– Los diseños orientados a objetos, al ser fácilmente extensibles,
permiten que el esfuerzo no aumente exponencialmente con el
tamaño y la complejidad del proyecto, tal y como sucede con
los sistemas convencionales
• Naturalidad
– El análisis y el diseño que dividen un dominio en objetos, está
más acorde con la realidad que una descomposición funcional
por refinamiento progresivo.
© Eduardo Mosqueira Rey Departamento de Computación Universidade da Coruña
17
Prog. Orientada a Objetos
Ventajas
• Seguridad
seguros
– La ocultación de información contribuye a crear sistemas
• Facilidad de mantenimiento
– La evolución de un sistema y los problemas de mantenimiento
quedan mitigados por la sólida partición que resulta del
encapsulamiento y de las interfaces uniformes entre objetos.
• Reducción de la complejidad
– La estructura que impone la orientación a obj
Comentarios de: Programación Orientada a Objetos - Tema 1: Introducción (1)