Unidad 1 Semana 1
Unidad 1 Semana 1
TALLER DE PROGRAMACIÓN
Contenido
Bienvenidos ............................................................................................................................................................................. 3
Introducción ............................................................................................................................................................................ 4
1. Concepto Orientación a Objetos ..................................................................................................................................... 5
1.1. Características de la Programación Orientación a Objetos .................................................................................... 5
1.1.1. Abstracción ......................................................................................................................................................... 5
1.1.2. Modularidad........................................................................................................................................................ 7
1.1.3. Encapsulamiento ................................................................................................................................................. 7
1.1.4. Jerarquía o Herencia ........................................................................................................................................... 8
1.1.5. Polimorfismo ..................................................................................................................................................... 10
1.1.6. Tipificación fuerte ................................................................................................................................................... 11
1.1.7. Manejo de Excepciones .......................................................................................................................................... 11
1.2. Ventajas de la Orientación a Objetos ................................................................................................................... 11
1.2.1. Flexibilidad ........................................................................................................................................................ 11
1.2.2. Reusabilidad ...................................................................................................................................................... 11
1.2.3. Mantenibilidad .................................................................................................................................................. 11
1.2.4. Extensibilidad .................................................................................................................................................... 12
1.3. Clase ...................................................................................................................................................................... 12
1.4. Objetos .................................................................................................................................................................. 12
1.4.1. Identificación de Objetos ........................................................................................................................................ 13
1.4.2. Comunicación entre Objetos .................................................................................................................................. 14
2. UML ............................................................................................................................................................................... 14
2.1. Representación gráfica de clases y objetos............................................................................................................ 14
2.2. Representación gráfica de la herencia .................................................................................................................... 16
Referencias ............................................................................................................................................................ 17
Bienvenidos
Introducción
Programas que permiten escribir instrucciones para Lenguaje de Programación Orientado a Objetos con
realizar algunas tareas. sintaxis similar a la del lenguaje C y C++. Utiliza como
plataforma la Máquina Virtual Java (JVM) y Java API
Conjunto de símbolos y reglas que se usan para (Aplication Programming Interface).
expresar algoritmos en una notación formal.
Java es un lenguaje de programación y una plataforma
¿Por qué estudiar Lenguajes de Programación? informática comercializada por primera vez en 1995 por
Para entender el diseño e implementación de los Sun Microsystems. Hay muchas aplicaciones y sitios
lenguajes. Para saber que lenguaje es más apropiado web que no funcionarán a menos que tenga Java
para resolver ciertos tipos de problemas. Incrementar instalado. Java es rápido, seguro y fiable. Desde
habilidad de aprender nuevos lenguajes. Para mejorar la portátiles hasta centros de datos, desde consolas para
habilidad para desarrollar algoritmos eficientes. Para juegos has súper computadoras, desde teléfonos
mejorar técnicas de programación. Para mejorar la móviles hasta Internet Java está en todas partes.
capacidad de expresar ideas.
Metodología de diseño de software que modela las características de objetos reales a través de la utilización de
clases y objetos. Persigue obtener una mayor representación de la realidad.
La idea es combinar datos y funciones en una sola unidad. Nace con el lenguaje Smalltack.
La programación orientada a objetos (POO, u OOP según sus siglas en inglés) es un paradigma de programación
que viene a innovar la forma de obtener resultados. Los objetos manipulan los datos de entrada para la
obtención de datos de salida específicos, donde cada objeto ofrece una funcionalidad especial.
Muchos de los objetos pre-diseñados de los lenguajes de programación actuales permiten la agrupación en
bibliotecas o librerías, sin embargo, muchos de estos lenguajes permiten al usuario la creación de sus propias
bibliotecas.
1.1.1. Abstracción
Se refiere a la representación de los objetos. Separa las propiedades más importantes de un objeto, de las que
no lo son.
Por medio de la abstracción se definen las características esenciales de un objeto del mundo real, los atributos y
comportamientos que lo definen como tal, para después modelarlo en un objeto de software.
Una abstracción se enfoca en la visión externa de un objeto, separa el comportamiento específico de un objeto,
a esta división que realiza se le conoce como la barrera de abstracción, la cual se consigue aplicando el principio
de mínimo compromiso.
Pero… ¿Qué es el principio de mínimo compromiso? Se refiere al proceso por el cuál la interfaz de un objeto
muestra su comportamiento específico y nada más, absolutamente nada más.
Pero… ¿Qué es una Interfaz? Una interfaz de objeto permite crear código con el cuál se específica que métodos
serán implementados por una clase sin necesidad de definir qué harán estos métodos, dichos métodos deben
ser públicos.
Pero… Existe también el principio de mínima sorpresa, en el cuál una abstracción obtiene el comportamiento
completo de algún objeto y por ende no ofrece sorpresas o efectos laterales que lleguen más allá del ámbito de
la abstracción.
Hay una alta gama de abstracciones que existen desde los objetos que modelan muy cerca de entidades, a
objetos que no tienen razón para existir, vamos a hacer una rápida mención de ello.
Abstracción de Entidades: Es un objeto que representa un modelo útil de una entidad que se desea.
Abstracción de Acciones: Un objeto que representa un conjunto de operaciones y todas ellas desempeñan
funciones del mismo tipo.
Abstracción de Máquinas virtuales: Un objeto que agrupa operaciones, todas ellas virtuales, utilizadas por algún
nivel superior de control u operaciones (entre ellos podríamos hablar de un circuito).
Abstracción de coincidencia: Un objeto que almacena un conjunto de operaciones que no tienen relación entre
sí.
En un modelo contractual de programación podemos mencionar que la vista exterior de cada objeto define una
interfaz del que puedan depender otros objetos, esta interfaz como bien lo habíamos mencionado, establece
todas las suposiciones que pueda hacer un objeto cliente acerca del comportamiento de un objeto servidor, es
decir la interfaz abarca las responsabilidades de un objeto, dicho en otras palabras, abarca el comportamiento
del que se le considera responsable.
Un objeto puede actuar y reaccionar de diferentes formas, un conjunto de operaciones que puede realizar un
cliente sobre un objeto se le denomina protocolo.
No está demás mencionar que toda abstracción tiene propiedades estáticas y dinámicas.
Dependiendo el contexto que se está analizando el contenido u otras propiedades pueden ser dinámicas como
estáticas.
Supongamos que en este ejemplo nos están solicitando la abstracción de un vehículo en cuanto a su
comportamiento.
La pregunta que hago es ¿Cuáles son los comportamientos que tienen todos los vehículos? con base a esta
pregunta, automáticamente fluye nuestra abstracción del comportamiento de un vehículo.
✓ Encender Vehículo
✓ Apagar Vehículo
✓ Acelerar Vehículo
✓ Frenar Vehículo
✓ Retroceder Vehículo
✓ Parabrisas Vehículo
1.1.2. Modularidad
Modularidad en la Programación Orientada a Objetos consiste en dividir un programa en módulos que puedan
compilarse por separado, sin embargo tendrá conexiones con otros módulos. También se le conoce como la
propiedad que permite subdividir una aplicación en partes más pequeñas, cada una de las cuales deben ser tan
independientes como sea posible de la aplicación en sí y de las restantes partes. La modularidad debe seguir los
conceptos de acoplamiento y cohesión.
1.1.3. Encapsulamiento
Propiedad que permite asegurar que la información de un objeto sea desconocida para los demás objetos de la
aplicación. Se conoce también como ocultamiento de la información.
Permite proteger a los objetos de ser manipulados de forma inadecuada por objetos externos.
Como java es un lenguaje de programación orientado a objetos, existen en un programa, diversos atributos y
métodos que servirán para el funcionamiento de éste. Para la interacción del usuario con el objeto es necesario
que se apliquen, o se encuentren disponibles, solo aquellos métodos que le servirán al usuario para utilizar ese
objeto, manteniendo “ocultos” aquellos que servirán para el funcionamiento interno.
Es por ello que el encapsulamiento consiste en permitir la visibilidad de atributos y/o métodos, en una clase
determinada, teniendo así tres niveles de: privados (private) que se utilizaran solo en esa clase, protegidos
(protected) que se utilizaran por todas los métodos, clases y /o atributos mientras se encuentre en el mismo
package, y los públicos (public) que pueden ser usados por cualquier clase o método.
Cada objeto está aislado del exterior, de forma que la aplicación es un conjunto de objetos que colaboran entre
sí mediante el paso de mensajes invocando sus operaciones o métodos. De esta forma, los detalles de
implementación permanecen "ocultos" a las personas que usan las clases, evitando así modificaciones o accesos
indebidos a los datos que almacenan las clases.
Además, el usuario de la clase no se tiene que preocupar de cómo están implementados los métodos y
propiedades, concentrándose sólo en cómo debe usarlos.
La encapsulación es una de las principales ventajas que proporciona la programación orientada a objetos.
Propiedad que permite a partir de clases, construir nuevas clases, permitiendo heredar sus características
(atributos y acciones). Tiene como objetivo la reutilización de código anteriormente desarrollado.
Existen dos clases, a las que llamaremos padre (superclase o clase base) e hija (subclase o clase derivada) Al igual
que las herencias en la vida real, la clase hija pasa a tener lo que tiene la clase padre es decir hereda los
Atributos y Métodos.
Un objeto de la clase hija es también un objeto de la clase padre. En la clase hija se definen las diferencias
respecto de la clase padre.
Para extender la funcionalidad de la clase padre o para especializar el comportamiento de la clase padre
Herencia Simple. Es aquel tipo de herencia en la cual un objeto (clase) puede tener solo un ascendente.
Herencia Múltiple. Es aquel tipo de herencia donde un objeto (clase) puede tener una o más superclases.
“Es importante reconocer que JAVA solo implementa en su programación la herencia Simple”
Ventajas
✓ Se ahorra código
✓ Permite reutilizar código extendiendo su funcionalidad
Desventajas
✓ Se introduce una fuerte dependencia en la clase hija respecto a la clase padre
✓ Puede dificultar la reutilización
✓ Un cambio en la clase padre puede tener efectos imprevistos en las clases hijas
✓ Un objeto de una clase hija puede tener un comportamiento inconsistente con lo esperado de un objeto
de la clase padre
✓ Se establece una jerarquía o clasificación. Si cambia el criterio de clasificación puede acarrear muchas
modificaciones
Herencia en Java
Visibilidad: Los miembros privados de la superclase no son visibles desde la subclase. Los miembros públicos de
la superclase son visibles y siguen siendo públicos en la subclase.
En ciertos casos, una clase se diseña directamente para ser extendida por un conjunto de subclases.
En estos casos suele interesar no implementar alguno de sus métodos, pues no tiene ningún significado en la
clase base.
Es necesario declarar tanto la clase como los métodos no implementados como abstractos a través de la palabra
reservada abstract.
Una clase abstracta es, por tanto, aquella que tiene alguno de sus métodos definido pero no implementado.
Podemos crear una clase Animal a partir de la cual crearemos otras clases que definan animales concretos.
(Casi) todos los animales emiten algún sonido, pero no hay ninguno común para todos los animales.
1.1.5. Polimorfismo
El polimorfismo es uno de los 4 pilares de la programación orientada a objetos junto con la Abstracción,
Encapsulamiento, y Herencia. Para empezar el término “Polimorfismo” es una palabra de origen griego que
significa “muchas formas”. Este término se utiliza en la POO para “referirse a la propiedad por la que es posible
enviar mensajes sintácticamente iguales a objetos de tipos distintos”. El único requisito que deben cumplir los
objetos que se utilizan de manera polimórfica es saber responder al mensaje que se les envía.
Entonces podemos decir que se basa en que los componentes o entidades puedan responder de manera distinta
ante diversas invocaciones. Esto se consigue a través de nombrar métodos o constructores de una clase con un
mismo nombre pero con diferentes implementaciones.
Sobrecarga de métodos: definir dos métodos o más dentro de una misma clase con el mismo nombre con
declaración de parámetros diferente.
Sobrecarga de constructores: definir dos constructores o más dentro de una misma clase con el mismo nombre
con declaración de parámetros diferente.
Declarar los tipos de datos soportados para cada variable antes de usarlas.
Permite captar y manipular excepciones (errores) que puedan surgir durante la ejecución de un programa.
1.2.1. Flexibilidad
Se parte del hecho de que a partir de la definición de clases se establecen módulos independientes, a partir de
los cuales se pueden definir nuevas clases. En este tipo de ventajas se hace referencia a las características de
(Herencia, Abstracción y Modularidad).
1.2.2. Reusabilidad
Una vez que se definió una entidad particular para una aplicación determinada, y se desea construir otra
aplicación en donde podemos definir la misma entidad, no es deseable volver a escribir la definición para la
misma entidad. También nos permite la Reutilización de entidades para ahorro de código. En este tipo de
ventajas se hace referencia a las características de (Herencia, Abstracción, Modularidad, Encapsulamiento y
Polimorfismo).
1.2.3. Mantenibilidad
Existe la facilidad para mantener las clases que conforman una aplicación, vistas como módulos entre si, sin
afectar a los demás componentes de la aplicación. En este tipo de ventajas se hace referencia a las
características de (Herencia, Abstracción y Modularidad).
1.2.4. Extensibilidad
Dada una aplicación pequeña es fácil agregar nuevas funcionalidades para cubrir necesidades de crecimientos
de la aplicación. En este tipo de ventajas se hace referencia a las características de (Herencia, Abstracción y
Modularidad).
1.3. Clase
Es un molde o un prototipo donde se definen los atributos (variables) y las acciones (métodos) comunes de una
entidad.
1.4. Objetos
Son elementos que representan un grupo asociado de características y está diseñado para realizar tareas
específicas. También se les conoce como instancias.
En la figura 4 se puede apreciar cómo se crear un objeto en java y como se utiliza dicho objeto para llamar a los
atributos de la clase.
Ejemplo:
Perro
Estado: nombre, raza, color
Comportamiento: ladrar, correr, oler
Bicicleta
Estado: pedales, ruedas
Comportamiento: frenar, acelerar, cambiar
La primera dificultad que se nos plantea al analizar un problema que se desea implementar mediante un
programa O.O. es identificar los objetos.
Una vez identificados los objetos, será preciso identificar los atributos y las operaciones que actuaran sobre
ellos.
Los atributos describen la abstracción de las características individuales que poseen todos los objetos.
Un mensaje contiene:
✓ Identificador del objeto
✓ Identificador del método
✓ Parámetros (si son necesarios)
2. UML
Para diferenciar entre clases y objetos, los nombres de los objetos se subrayan.
Ejemplo:
Los atributos se representan con su nombre seguido de las posibles restricciones que pueda tener.
Ejemplo:
Los objetos se representan de un modo similar a las clases, pero se diferencian en que el nombre del objeto
esta subrayado y se pueden introducir valores iniciales a los atributos
La jerarquía de clases o herencia se representa mediante una flecha que une las clases derivadas o subclases
con la clase base o superclase.
Comentario Final
El Objetivo principal de esta primera semana ha sido comprender las principales características y ventajas de la POO
(Programación Orientada a Objeto), como así también hemos reconocido la representación gráfica de clases a
través de UML, por último descubrimos los orígenes, evolución, filosofía, características, versiones y entornos de
trabajo que provee la Tecnología Java.
Todo lo aprendido aquí se podrá aplicar en las próximas semanas, en donde se profundizara en mayor detalle sobre
el desarrollo que ofrece el Lenguaje Java y el entorno de desarrollo (IDE) NetBeans.
Referencias