Programación orientada a objetos Ing. Rolando Steep Quezada Martínez [email_address] Programación Básica en Java y Program...
Calidad del software   <ul><li>Factores Externos </li></ul><ul><li>Pueden ser detectados por los usuarios </li></ul><ul><l...
Factores de calidad del software <ul><li>Factores Externos </li></ul><ul><li>- Corrección - Eficiencia - Economía </li></u...
 
Tecnología de objetos <ul><li>Construcción de software utilizando  componentes reutilizables   con  interfaces   bien defi...
 
¿Qué es la programación orientada a objetos? <ul><li>Organización de los programas de manera que representan la interacció...
Resolución de problemas “con orientación a objetos” <ul><li>Problema </li></ul><ul><li>Quiero enviar un paquete a un amigo...
Características de POO <ul><li>Abstracción </li></ul><ul><li>Encapsulamiento </li></ul><ul><li>Modularidad </li></ul><ul><...
 
Objetos <ul><li>Los objetos son cosas </li></ul><ul><li>Los objetos pueden ser simples o complejos </li></ul><ul><li>Los o...
Clases <ul><li>Los objetos con estados similares y mismo comportamiento se agrupan en clases </li></ul><ul><li>La definici...
Clases <ul><li>Las definiciones de clases son  abstracciones  (ejemplo: Calculadora) </li></ul><ul><li>Ellas definen el co...
Clases y objetos PERRO raza, color... come, ladra... RAMBO bulldog gris come caviar ladra fuerte  En el mundo real  En OOP...
Clases, UML y Java <ul><li>public class  Perro  { </li></ul><ul><li>public  String nombre  ; </li></ul><ul><li>public  Str...
 
Atributos <ul><ul><li>Atributos de clase: </li></ul></ul><ul><ul><ul><li>Común a todas las instancias de una clase </li></...
 
Métodos <ul><li>Código que “entiende” y manipula el estado de un objeto </li></ul><ul><li>Pueden ser llamados dentro de la...
 
Constructores <ul><li>Procedimiento con el  mismo nombre que la clase. </li></ul><ul><li>Se invoca   automáticamente   cad...
 
Creación de objetos <ul><li>Un objeto es una instancia de una clase.  </li></ul><ul><li>La creación de un objeto se realiz...
<ul><li>Público  – los miembros que se declaran como  public   son accesibles en cualquier parte donde la clase sea accesi...
Paquetes <ul><li>Permite agrupar todas las clases relacionadas  </li></ul><ul><li>//MiClase.java </li></ul><ul><li>package...
Resumen <ul><li>Las clases son abstracciones que encapsulan el estado y el comportamiento de un conjunto de objetos </li><...
Próxima SlideShare
Cargando en…5
×

Programación Orientada a Objetos

7.730 visualizaciones

Publicado el

Publicado en: Tecnología
0 comentarios
2 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

Sin descargas
Visualizaciones
Visualizaciones totales
7.730
En SlideShare
0
De insertados
0
Número de insertados
47
Acciones
Compartido
0
Descargas
190
Comentarios
0
Recomendaciones
2
Insertados 0
No insertados

No hay notas en la diapositiva.
  • Objetivos Conocer a nivel general conceptos de Tecnología de Objetos Entender claramente los conceptos de clase y objeto, identificando sus diferencias. Definir los conceptos de modelado: Abstracción, encapsulamiento y paquetes Definir una clase, miembro, atributo, método, constructor y paquete. Usar los modificadores de acceso private y public apropiadamente Distinguir entre una variable de instancia y local (clase). Describir como se inicializa una variable de instancia. Construir un objeto usando el operador new . Invocar un método de un objeto particular.
  • Calidad de software y POO La Programación Orientada a Objetos es un conjunto de técnicas para obtener calidad interna como medio para obtener calidad externa (Reutilización y Extensibilidad)
  • Factores de calidad del software Corrección .- Es la capacidad de los productos software de realizar con exactitud su tarea, tal y como es definida en la especificación. Definir los requisitos de manera precisa. Robustez .- Es la capacidad de los productos software de reaccionar adecuadamente ante situaciones excepcionales. Tienen que ver con el comportamiento (casos previstos o no). Extensibilidad .- Es la facilidad de adaptación de los productos software a los cambios en la especificación. Los cambios son frecuentes puesto que en la base de todo software hay algún fenómeno humano. Dificultad de adaptación proporcional al tamaño del sistema. Principios esenciales para facilitar la extensibilidad: Simplicidad de la arquitectura del software Descentralización : módulos autónomos
  • Reutilización .- Es la capacidad de un producto software de ser utilizado en la construcción de diferentes aplicaciones No reinventar soluciones para problemas ya resueltos. Se escribe menos software, luego se puede dedicar mas tiempo a mejorar otros factores (fiabilidad) Compatibilidad .- Es la facilidad de combinar unos elementos software con otros Los sistemas necesitan interactuar con otros Convenciones estándar de comunicación inter-módulos Eficiencia .- Es la capacidad de un sistema software de requerir la menor cantidad posible de recursos hardware. Factor importante para la utilización Algunos están obsesionados con micro-optimizaciones Debemos conjugar eficiencia con los otros objetivos Los mecanismos OO deben ser implementados de un modo eficiente tanto en tiempo como en espacio Portabilidad .- Es la facilidad de transferir productos software a diferentes plataformas (entornos hardware y software). Facilidad de Uso .- Es la facilidad con la que personas con diferentes niveles de experiencia pueden aprender a usar los productos software y aplicarlos a resolver problemas. También incluye la facilidad de instalación, operación y supervisión. Funcionalidad .- Conjunto de posibilidades ofrecido por un sistema Evitar añadir propiedades de forma incontrolada Buen producto software debe estar basado en un pequeño número de grandes ideas Mantener constante el nivel de calidad Oportunidad.- Es la capacidad de un sistema software de ser lanzado cuando los usuarios lo desean, o antes. Economía .- Completarse con el presupuesto asignado Integridad .- Proteger contra modificaciones y accesos no autorizados Facilidad para reparaciones .- Corregir defectos sin rehacer el software Facilidades de Verificación .- Datos de prueba y procedimientos para detectar fallos
  • Tecnología de objetos Se pueden considerar varias capas: La capa inferior son objetos (software chips) La capa intermedia son colecciones de objetos relacionados ( patrones de diseño OO ) La capa superior son aplicaciones que resuelven problemas específicos (armazones o frameworks ) Promueve el diseño basado en interfaces y arquitecturas estándares, con una organización y un proceso Durante el desarrollo del sistema lo importante es “qué es” y “qué hace” un objeto antes de decidir “cómo” se implementará Se centra en el comportamiento : operaciones que los clientes realizarán en el objeto, y operaciones que realizará sobre otros objetos Un cliente es un objeto que usa los recursos/servicios de otros objetos (servidores)
  • Motivos que han conducido al éxito la tecnología de objetos Avances en arquitectura de computadores Avances en lenguajes de programación (C++, Smalltalk, Ada, Java, C# ...) Ingeniería del software (modularidad, encapsulado de la información, proceso de desarrollo incremental) Los límites de la capacidad de gestionar la complejidad de los sistemas simplemente con técnicas de descomposición algorítmica Ventajas de la tecnología de objetos Mejoras significativas de la productividad y calidad del código Estabilidad de los modelos respecto a entidades del mundo real Construcción iterativa Promueve la reutilización de software y de diseños (componentes, frameworks). Los sistemas OO son generalmente más pequeños que su equivalente no OO: menos código y más reutilización. Permite desarrollar sistemas más preparados para el cambio Vale para aplicaciones de pequeño y gran tamaño
  • ¿Qué es la programación orientada a objetos? Un programa consta de un conjunto de objetos. Los objetos son abstracciones de cosas del mundo real. Nos interesa qué se puede hacer con los objetos más que cómo se hace. Cada objeto es responsable de unas tareas. Los objetos interactúan entre sí por medio de mensajes. Cada objeto es un ejemplar de una clase. Las clases se pueden organizar en una jerarquía de herencia.
  • Resolución de problemas “con orientación a objetos” Consecuencias Un programa orientado a objetos se estructura como un conjunto de agentes que interactúan (programa como colección de objetos). Cada objeto proporciona un servicio que es utilizado por otros objetos (reutilización). La acción se inicia por la transmisión de un mensaje al objeto responsable de realizarla. Si el receptor acepta el mensaje, acepta la responsabilidad de llevar a cabo la acción solicitada. El receptor puede utilizar cualquier técnica que logre el objetivo deseado.
  • Características de la programación orientada a objetos Abstracción Se define abstracción como la extracción y análisis de la abundancia de información en datos relacionados. Es importante que datos relacionados se mantengan juntos para su fácil manipulación. Es igualmente importante abstraer la información genérica de la información especifica con que se cuenta. Análisis sobre qué conoce y sobre qué hace un elemento determinado. Análisis de las características, atributos y métodos que son (y que no son) de interés para la aplicación en consideración. La abstracción de un elemento depende del contexto en el que se define. Encapsulamiento Se define encapsulamiento como el ocultamiento de datos relacionados detrás de una interface de métodos. Estos métodos permiten acceder a la información y manipularla convenientemente. Modularización de las características de un elemento. Un sistema se modulariza en clases, las que se modularizan en métodos y atributos. El comportamiento es encapsulado en métodos. La información es encapsulada en atributos. A través del encapsulamiento se define el qué se hace ocultando el c ómo se hace.
  • Ocultamiento de la información Restricción de acceso al estado interno de un elemento. Si una clase requiere información sobre otra clase entonces debe solicitarla (no debe utilizarla directamente). El ocultamiento de la información previene escribir código altamente acoplado. Estándares Object Management Group (OMG) UML CORBA American National Standards Institute (ANSI) C++ SUN Microsystems JAVA EJB Componentes Un componente es una unidad modular y extensible de implementación independiente que tiene un contrato especifico de interfaz y dependencias explícitamente definidas. MODULARIDAD: posee todo lo necesario para su funcionalidad EXTENSIBILIDAD: debiera poder extenderse su funcionalidad original ABIERTO: soporte a diferentes plataformas e intreracción con otros componentes Procesos de Desarrollo Es un conjunto de fases, métodos, técnicas y prácticas que se usan para desarrollar y mantener software con sus documentos asociados. RAD, basado en componentes, Iterativo, incremental, espiral, UP. Fábricas de Software Software de soporte para desarrollar software Frameworks Conjunto reutilizable de bloques de construcción de software que se pueden usar, extender o adecuar. Patrones Es una solución reusable de un problema común que soporta la transferencia de técnicas probadas y decisiones a otros programadores.
  • Objetos Unidad atómica que encapsula estado y comportamiento Un objeto puede caracterizar una entidad física (un teléfono, un interruptor, un cliente) o una entidad abstracta (un número, una fecha, una ecuación matemática). Todos los objetos son instancias de una clase: Los objetos se crean por instanciación de las clases. Todos los objetos de una misma clase (p.ej. automóviles) comparten ciertas características: sus atributos (tamaño, peso, color, potencia del motor, …) y el comportamiento que exhiben (aceleran, frenan, curvan, …). Características Identidad (puede distinguirse de otros objetos) Estado (datos asociados a él) Comportamiento (puede hacer cosas)
  • Clases Implementación de un tipo de dato. Una clase sirve tanto de módulo como de tipo Tipo : ( concepto semántico ) Mecanismo de definición de nuevos tipos de datos: describe una estructura de datos (objetos) para representar valores de un dominio y las operaciones aplicables. Módulo : ( concepto sintáctico ) Mecanismo para organizar el software Encapsula componentes software
  • Clases Cada clase tiene comportamientos o responsabilidades o mensajes que pueden ser enviados a la clase Puntos Tienen distancia desde origen puede ser trasladados, ... Líneas Tienen largo, pendiente puede intersectar otra, ... Rectángulos Tienen largo, ancho, diagonal, perímetro, área, ….
  • Clases y objetos Clase Representa una plantilla (template) de varios objetos y describe como esos objetos están estructurados internamente. Objeto Entidad capaz de mantener un estado ( información representada por atributos) y que ofrece un conjunto de operaciones ( comportamiento representados por métodos) tanto para examinar como para modificar ese estado. Instancia Una instancia es un objeto creado a partir de una clase. La clase describe la estructura de la instancia (información y comportamiento), mientras que el estado actual de la instancia es definido por las operaciones ejecutadas. El estado interno de cada instancia es propia de cada una y se compone de los atributos establecidos en la clase. Podemos instanciar (crear) múltiples objetos de una misma clase crear puntos en diferente lugar del espacio. crear conjunto de líneas - todas con diferente pendiente y largo. Luego de crear un objeto, podemos aplicar operaciones de su clase a éste Encontrar la distancia de un punto al origen. Mover a punto a una posición nueva. Determinar el largo de la línea. Preguntar si dos líneas se interceptan. Formalmente, decimos que invocamos métodos de la clase o enviamos mensajes a un objeto de la clase.
  • Clases, UML y Java UML( U nified M odeling L anguage) Lenguaje Unificado de Modelado, cuyos objetivos son: Proporcionar a los usuarios un lenguaje de modelado visual expresivo y utilizable para el desarrollo e intercambio de modelos significativos. Proporcionar mecanismos de extensión y especialización. Proporcionar una base formal para entender el lenguaje de modelado. Fomentar el crecimiento del mercado de las herramientas OO. Soportar conceptos de desarrollo de alto nivel como pueden ser colaboraciones, armazones, patrones y componentes Estado y comportamiento están relacionados . Ejemplo Un avión no puede aterrizar (acción) si no está en vuelo (estado) Representación gráfica de una clase (notación UML) Una clase se representa con un rectángulo dividido en tres partes: - El nombre de la clase (identifica la clase de forma unívoca) - Sus atributos (datos asociados a los objetos de la clase) - Sus operaciones (comportamiento de los objetos de esa clase) NOTA: Las clases se deben identificar con un nombre que, por lo general, pertenecerá al vocabulario utilizado habitualmente al hablar del problema que tratamos de resolver.
  • Clases en Java ( sintaxis básica ) package nombrePaquete ; //define el nombre del paquete contenedor de la clase [lista de importaciones] [ public ] class NombreClase //Define la clase { //Inicio del cuerpo de la Clase //Define una constante public static final constante = valorInicial ; //Define un atributo de instancia alcance tipoDato atributoInstancia [ = valorInicial ] ; //Define un atributo de clase alcance static tipoDato atributoClase [ = valorInicial ] ; //Define un constructor public NombreClase ( [ listaArgumentos ] ) { listaSentencias ; } //Define un método de instancia alcance void| tipoRetorno metodoInstancia ( [ listaArgumentos ] ) { listaDeclaraciones ; listaSentencias ; [ return expresión ; ] //si tipo de retorno diferente de void } //Define un método de clase alcance static void| tipoRetorno metodoClase ( [ listaArgumentos ] ) { listaDeclaraciones ; listaSentencias ; [ return expresión ; ] //si tipo de retorno diferente de void } } //Fin de la clase NOTA: Una clase debe estar definida dentro de un archivo de texto con extensión *.java de la siguiente forma NombreClase.java y como primera sentencia debe especificar el paquete al cual pertence.
  • Atributos Representan los estado o características de un objeto o conjunto de objetos Atributos de clase Los atributos de clase son aquellos que representan valores comunes a todos las instancias de una clase pueden tener un valor inicial; por ejemplo, edad promedio, total de alumnos, etc. … static double edadPromedio ; static int totalAlumnos = 0 ; Atributos de instancia Los atributos de instancia son aquellos que representan valores propios de un solo objeto que lo diferencia de otros objetos de su misma clase, pueden tener un valor por defecto; por ejemplo, nombre, fecha de nacimiento, numero ejes (auto), tamaño, etc. … String nombre ; Date fechaNacimiento ; int numeroEjes = 2 ; Constantes Las constantes de Java son definidas por el modificador final y representan valores inmutables en tiempo y espacio; por convención el nombre de las constantes debe estar totalmente en mayúsculas; por ejemplo: PI = 3.141516, etc. … static final double PI = 3.141516 ;
  • Inicialización de Atributos Si un atributo no se inicializa se le asigna un valor por defecto en función de su tipo: Inicialización por defecto de los objetos en Java Cuando se crea un objeto con el operador new, por defecto: Las variables de instancia de tipo numérico (byte, short, int, long, float y double) se inicializan a 0. Las variables de instancia de tipo char se inicializan a ‘’. - Las variables de instancia de tipo boolean se inicializan a false. Las variables de instancia de cualquier tipo no primitivo se inicializan a null (una palabra reservada del lenguaje que indica que la referencia no apunta a ninguna parte). NOTA: Para acceder a un miembro de un objeto (leer el valor de una variable de instancia o invocar un método) hemos de tener una referencia a un objeto distinta de null. +0.0f float false boolean ‘ u000’ char null Referencia a objeto +0.0d double 0 byte,short,int,long Valor Inicial Tipo
  • Métodos Representan el comportamiento de un Objeto o conjunto de objetos Métodos de Clase Acciones que no requieren de un Objeto específico para su realización; por ejemplo, sumar dos números, buscar por código, etc. … Los métodos de clase sólo tiene acceso a los atributos de clase. static double sumar ( double a , double b ) { double suma = 0.0 ; suma = a + b ; return suma ; } Métodos de Instancia Acciones que requieren de un Objeto específicos; por ejemplo, obtener la edad, obtener el nombre completo, cambiar el nombre, encender (auto), etc. … Los métodos de instancia tiene acceso a todos los miembros de una clase, sean de instancia o de clase. boolean encender ( ) { … } Invocar un Método (Enviar un mensaje) Calculadora. sumar( 12.2 , 13.6 ) ; objAuto . encender( ) ;
  • Sobrecarga de métodos Java soporta sobrecarga de métodos el mismo nombre pero con DIFERENTE lista de argumentos SIEMPRE devuelven el mismo tipo public class ListaEnteros{ … public void add ( int elem){…} public void add ( int elem, int index){…} } Paso de parámetros siempre por valor los valores de los parámetros son copias de los valores que especifica el que lo invoca tipos primitivos no cambian los objetos pueden cambiar su estado  se pasa por valor la referencia Referencias Cualquier tipo que definamos en Java con una clase es un tipo no primitivo. Cuando declaramos una variable de un tipo primitivo en Java, estamos reservando espacio en memoria para almacenar un valor del tipo correspondiente. Sin embargo, cuando declaramos una variable de un tipo no primitivo en Java, lo único que hacemos es reservar una zona en memoria donde se almacenará una referencia a un objeto del tipo especificado (y no el objeto en sí, de ahí la necesidad de utilizar el operador new).
  • Constructores Cuando utilizamos el operador new acompañado del nombre de una clase, se crea un objeto del tipo especificado (una instancia de la clase cuyo nombre aparece al lado de new). Al crear un objeto de una clase concreta, se invoca a un método especial de esa clase, denominado constructor , que es el que se encarga de inicializar el estado del objeto. Constructor por defecto Por defecto, Java crea automáticamente un constructor sin parámetros para cualquier clase que definamos. public class Cuenta { // Constante public static final double LIMITE_NORMAL = 300.00; // Variables de instancia private double saldo = 0.0d; private double limite = LIMITE_NORMAL; // Métodos ... } Al crear un objeto de tipo Cuenta con new Cuenta(), se llama al constructor por defecto de la clase Cuenta, con lo cual se crea un objeto de tipo Cuenta cuyo estado inicial será el indicado en la inicialización de las variables de instancia saldo y limite. Para facilitarnos la creación de objetos, Java nos permite definir varios constructores para una misma clase (siempre y cuando tengan parámetros diferentes).
  • Constructores definidos por el usuario Los lenguajes de programación nos permiten definir constructores para especificar cómo ha de inicializarse un objeto al crearlo. El nombre del constructor ha de coincidir con el nombre de la clase. Podemos definir un constructor para inicializar las variables de instancia de una clase, en vez de hacerlo en la propia declaración de las variables de instancia: public class Cuenta { // Constante public static final double LIMITE_NORMAL = 300.00; // Variables de instancia private double saldo; private double limite; // Constructor sin argumentos public Cuenta ( ) { this.saldo = 0.0 ; this.limite = LIMITE_NORMAL ; } // Constructor con argumentos public Cuenta ( double saldoInicial ) { this.saldo = saldoInicial ; this.limite = LIMITE_NORMAL ; } // Métodos ... } Nota: La palabra reservada this ( instancia actual ) hace referencia al objeto que realiza la operación cuya implementación específica el método.
  • Creación de objetos Antes de poder usar un objeto hemos de crearlo. El operador new El operador new nos permite crear objetos en Java. Tipo identificador = new Tipo ( [argumentos] ); Si escribimos un programa como el siguiente: public class Ingreso { public static void main (String args[]) { Cuenta miCuenta; miCuenta.ingresar(100.00); // Error } } El compilador nos da el siguiente error: Ingreso.java:7: variable cuenta might not have been initialized cuenta.ingresar(100.00); ^ Hemos declarado una variable que, inicialmente, no tiene ningún valor. Antes de utilizarla, deberíamos haberla inicializado (con un objeto del tipo adecuado): Cuenta cuenta = new Cuenta ( );
  • Representación en UML Atributo Público Atributo Protegido Atributo Privado ¿Cómo se comprueba el estado de un objeto? Accediendo a las variables de instancia del objeto objeto.atributo Por ejemplo, cuenta.saldo nos permitiría acceder al valor numérico correspondiente al saldo de una cuenta siempre y cuando éste sea público y fuese una instancia de la clase Cuenta. Estándar Javabean: Una clase debe definir todos sus Atributos privados y acceso a través de métodos públicos ( set/get ); si una cuenta tiene el atributo saldo, este debe ser privado y definir los siguientes métodos: public class Cuenta{ private double saldo ; public double getSaldo() { return saldo; } public void setSaldo(double nuevoSaldo ) { saldo = nuevoSaldo ;} }
  • Paquetes Agrupan un conjunto de clases relacionadas o altamente cohesionadas. Paquetes básicos del JDK de Java java.lang : para funciones del lenguaje //Disponible sin import java.util : para utilidades adicionales java.io : para manejo de ficheros java.awt : para diseño gráfico e interfaz de usuario java.awt.event : para gestionar eventos javax.swing : nuevo diseño de GUI java.net : para comunicaciones java.sql : para acceso a datos con JDBC
  • Programación Orientada a Objetos

    1. 1. Programación orientada a objetos Ing. Rolando Steep Quezada Martínez [email_address] Programación Básica en Java y Programación Orientada a Objetos
    2. 2. Calidad del software <ul><li>Factores Externos </li></ul><ul><li>Pueden ser detectados por los usuarios </li></ul><ul><li>Calidad externa es la que realmente preocupa </li></ul><ul><li>Factores Internos </li></ul><ul><li>Sólo los perciben los diseñadores y desarrolladores </li></ul><ul><li>Medio de conseguir la calidad externa </li></ul>OBJETIVO Buenas propiedades internas Satisfacer factores externos
    3. 3. Factores de calidad del software <ul><li>Factores Externos </li></ul><ul><li>- Corrección - Eficiencia - Economía </li></ul><ul><li>- Robustez - Portabilidad - Integridad </li></ul><ul><li>- Extensibilidad - Facilidad de uso - Facilidad de reparación </li></ul><ul><li>- Reutilización - Funcionalidad - Facilidad de verificación </li></ul><ul><li>- Compatibilidad - Oportunidad </li></ul><ul><li>Factores Internos </li></ul><ul><li>- Modularidad </li></ul><ul><li>- Legibilidad </li></ul>
    4. 5. Tecnología de objetos <ul><li>Construcción de software utilizando componentes reutilizables con interfaces bien definidas </li></ul><ul><li>“ Las aplicaciones no se construyen desde cero” </li></ul><ul><li>Los objetos permiten representar los conceptos esenciales de una entidad ignorando sus propiedades accidentales </li></ul><ul><li>“ Lo principal es la visión externa” </li></ul><ul><li>“ Más centrado en el diseño y aplicación de técnicas de ingeniería de software” </li></ul>
    5. 7. ¿Qué es la programación orientada a objetos? <ul><li>Organización de los programas de manera que representan la interacción de las cosas en el mundo real </li></ul><ul><li>“ La programación OO es una simulación de un modelo del universo” </li></ul>
    6. 8. Resolución de problemas “con orientación a objetos” <ul><li>Problema </li></ul><ul><li>Quiero enviar un paquete a un amigo que vive en otra ciudad </li></ul><ul><li>Opciones </li></ul><ul><li>a) Hacerlo todo yo mismo </li></ul><ul><ul><li>Descomposición en subproblemas (programación estructurada) </li></ul></ul><ul><li>b) Delegar en alguien para que lo haga (p.ej. Correos) </li></ul><ul><ul><li>“ Realizar un encargo ” (programación orientada a objetos) </li></ul></ul><ul><li>Solución orientada a objetos </li></ul><ul><ul><li>Se busca un objeto capaz de enviar un paquete </li></ul></ul><ul><ul><li>Se le envía un mensaje con mi solicitud </li></ul></ul><ul><ul><li>El objeto se hace responsable de satisfacer mi solicitud </li></ul></ul><ul><ul><li>El objeto utiliza un algoritmo que yo no tengo por qué conocer </li></ul></ul>
    7. 9. Características de POO <ul><li>Abstracción </li></ul><ul><li>Encapsulamiento </li></ul><ul><li>Modularidad </li></ul><ul><li>Herencia </li></ul><ul><li>Agregación </li></ul><ul><li>Polimorfismo </li></ul><ul><li>Estándares (OMG, UML, CORBA, ANSI, EJB, etc.) </li></ul><ul><li>Componentes y Paquetes </li></ul><ul><li>Armonía con los procesos de desarrollo. </li></ul><ul><li>Reutilización de código </li></ul><ul><li>Reutilización de conocimiento </li></ul><ul><li>Fábricas de software </li></ul><ul><li>Frameworks </li></ul><ul><li>Patrones </li></ul>
    8. 11. Objetos <ul><li>Los objetos son cosas </li></ul><ul><li>Los objetos pueden ser simples o complejos </li></ul><ul><li>Los objetos pueden ser reales o imaginarios </li></ul>
    9. 12. Clases <ul><li>Los objetos con estados similares y mismo comportamiento se agrupan en clases </li></ul><ul><li>La definición de la clase especifica el comportamiento y los atributos de los ejemplares (objetos) de la clase </li></ul>
    10. 13. Clases <ul><li>Las definiciones de clases son abstracciones (ejemplo: Calculadora) </li></ul><ul><li>Ellas definen el comportamiento (ejemplo: resolver una división) </li></ul><ul><li>Ellas no definen cómo es logrado </li></ul><ul><li>Las clases son cajas negras </li></ul>Implementaciones
    11. 14. Clases y objetos PERRO raza, color... come, ladra... RAMBO bulldog gris come caviar ladra fuerte En el mundo real En OOP CLASE define datos y métodos OBJETO ocupa espacio y dura un tiempo
    12. 15. Clases, UML y Java <ul><li>public class Perro { </li></ul><ul><li>public String nombre ; </li></ul><ul><li>public String raza ; </li></ul><ul><li>public String color ; </li></ul><ul><li>public Perro ( String nombre ) { </li></ul><ul><li>} </li></ul><ul><li>public void comer ( ) { </li></ul><ul><li>… </li></ul><ul><li>} </li></ul><ul><li>public void ladrar ( ) { </li></ul><ul><li>… </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
    13. 17. Atributos <ul><ul><li>Atributos de clase: </li></ul></ul><ul><ul><ul><li>Común a todas las instancias de una clase </li></ul></ul></ul><ul><ul><ul><li>Sólo se inicializan una vez. </li></ul></ul></ul><ul><ul><ul><li>Ej.: public static int nextCodigo ; </li></ul></ul></ul><ul><ul><li>Atributos de instancia: </li></ul></ul><ul><ul><ul><li>Determina el estado de los objetos </li></ul></ul></ul><ul><ul><ul><li>Cada objeto reserva memoria para todas las variables de instancia </li></ul></ul></ul><ul><ul><ul><li>Ej.: private String nombres ; </li></ul></ul></ul><ul><li>Declaración </li></ul><ul><ul><ul><li>[acceso] [ static ] [ final ] tipo nombreAtributo [= valor_inicial] ; </li></ul></ul></ul>
    14. 19. Métodos <ul><li>Código que “entiende” y manipula el estado de un objeto </li></ul><ul><li>Pueden ser llamados dentro de la clase o por otras clases </li></ul><ul><li>Es obligatorio indicar el tipo de retorno o void </li></ul><ul><li>Declaración: </li></ul><ul><ul><ul><li>[acceso] [static] void| tipoRetorno nombreMetodo ([argumentos]){ </li></ul></ul></ul><ul><ul><ul><li>//cuerpo del metodo </li></ul></ul></ul><ul><ul><ul><li>[ return valorRetorno;] </li></ul></ul></ul><ul><ul><ul><li>} </li></ul></ul></ul><ul><ul><li>[argumentos] = tipoDato parametro1, tipoDato parametro2, … </li></ul></ul><ul><li>Invocación: Notación punto </li></ul><ul><ul><ul><li>objReceptor . nombreMetodo(argumentos); </li></ul></ul></ul>
    15. 21. Constructores <ul><li>Procedimiento con el mismo nombre que la clase. </li></ul><ul><li>Se invoca automáticamente cada vez que se crea un objeto de la clase. </li></ul><ul><li>No pueden especificar tipos ni valores de retorno. </li></ul><ul><li>Permite sobrecarga para especificar formas distintas de inicializar los objetos. </li></ul><ul><li>Si no se define, el compilador crea uno por defecto sin argumentos que inicializa los atributos a los valores por defecto. </li></ul><ul><li>El programador también puede definir un constructor sin argumentos. </li></ul>
    16. 23. Creación de objetos <ul><li>Un objeto es una instancia de una clase. </li></ul><ul><li>La creación de un objeto se realiza en tres pasos </li></ul><ul><ul><li>Declaración , proporcionar un nombre al objeto </li></ul></ul><ul><ul><li>Contador miContador; (null) </li></ul></ul><ul><ul><li>Instanciación , asignar memoria al objeto </li></ul></ul><ul><ul><li>miContador = new Contador(); </li></ul></ul><ul><ul><li>Inicialización , opcionalmente se pueden proporcionar valores iniciales a las variables de instancia del objeto en la declaración o mediante CONSTRUCTORES . </li></ul></ul>
    17. 24. <ul><li>Público – los miembros que se declaran como public son accesibles en cualquier parte donde la clase sea accesible </li></ul><ul><li>Protegido – miembros declarados como protected sólo accesibles por clases del mismo paquete, en la propia clase, y sus Subclases. </li></ul><ul><li>Por defecto – miembros declarados sin modificador de acceso, sólo accesibles por clases del mismo paquete. </li></ul><ul><li>Privado – miembros declarados como private sólo accesibles en la propia clase. </li></ul>Control de acceso public class A{ public int at1; private int at2; … } public protected package private A a; A = new A() ; a.at1 = 6 //OK a.at2 = 5 //ERROR
    18. 25. Paquetes <ul><li>Permite agrupar todas las clases relacionadas </li></ul><ul><li>//MiClase.java </li></ul><ul><li>package miBiblioteca; </li></ul><ul><li>public class MiClase{ //... </li></ul><ul><li>Se coloca al comienzo del fichero; </li></ul><ul><li>Indica que las clases públicas que contenga está accesible a cualquiera que incluya: </li></ul><ul><li>import miBiblioteca.MiClase; o bien </li></ul><ul><li>import miBiblioteca.*; </li></ul><ul><li>Las clases que no tienen un nombre de paquete están en el paquete por defecto ( Default Package ) consideradas clases amigas (friendly) </li></ul><ul><li>Soporta el concepto de jerarquía de paquetes (estilo directorio) </li></ul><ul><li>ej: import miPaquete.miSubPaquete.MiClase; </li></ul>
    19. 26. Resumen <ul><li>Las clases son abstracciones que encapsulan el estado y el comportamiento de un conjunto de objetos </li></ul><ul><li>Los atributos de una clase representan los estados de los objetos que deriven de esta. </li></ul><ul><li>Los métodos de una clase representan el comportamiento de los objetos que deriven de esta y pueden manipular los estados de los mismos. </li></ul><ul><li>Cualquier tipo que definamos en Java con una clase es un tipo no primitivo. </li></ul><ul><li>Una clase puede definir varios métodos con el mismo nombre y tipo de retorno pero con diferente número y/o tipo de parámetros </li></ul><ul><li>Los constructores tienen el mismo nombre de la clase y se utilizan para crear nuevas instancia de objetos. </li></ul><ul><li>Los paquetes son el mecanismo para distinguir y agrupar clases según su funcionalidad y comportamiento. </li></ul><ul><li>UML define un lenguaje estándar para el modelado. </li></ul>

    ×