algo prg2 intro

138
PRG II - ALGO II- UNMSM 1 Algoritmica II Mg. Nehil Muñoz Casildo [email protected]

Upload: krla-c-ulloa

Post on 11-Oct-2015

27 views

Category:

Documents


0 download

TRANSCRIPT

  • PRG II - ALGO II- UNMSM 1

    Algoritmica II

    Mg. Nehil Muoz Casildo [email protected]

  • Metodologas de desarrollo de software ...

    Podr cumplir con los plazos?

    Estar dentro de lo presupuestado?

    El cliente quedar satisfecho?

    Cumplir requisitos, en tiempo y con la $.

    Las Metodologas pueden ser la ayuda que

    necesitamos, si podemos usarlas correctamente !!

  • Construccin de una casa para fido

    Puede hacerlo una sola persona

    Requiere:

    Modelado mnimo

    Proceso simple

    Herramientas simples

  • Construccin de una casa

    Construida eficientemente y en un tiempo

    razonable por un equipo

    Requiere:

    Modelado

    Proceso bien definido

    Herramientas ms sofisticadas

  • Construccin de un rascacielos

  • Qu es una Metodologa?

    Las metodologas imponen un

    proceso disciplinado sobre el

    desarrollo de software con el fin

    de hacerlo ms predecible y

    eficiente.

  • Introduccin a la Programacin Orientada a

    Objetos

  • Introduccin a la POO

    Programacin estructurada: Caractersticas Secuencial Imperativa Orientada a procesos

    Control de flujo de ejecucin Subprogramas

    Programacin OO: equilibrio entre procesos y datos Novedades

    Concepto de OBJETO (datos + procesos)

    Enfoque antropomrfico (orientado al hombre)

    Herencia

  • Bases de la Programacin

    Abstraccin

    Encapsulacin

    Modularidad

    Jerarqua

  • Bases de la Programacin

    Abstraccin: proceso mental de extraccin de las caractersticas esenciales de algo, ignorando los detalles superfluos

    Encapsulacin: proceso por el que se ocultan los detalles del soporte de las caractersticas de una abstraccin

  • Bases de la Programacin

    Modularidad: proceso de descomposicin de

    un sistema en un conjunto de mdulos (piezas) poco acoplados (independientes) y cohesivos (con significado propio)

    Jerarqua: proceso de estructuracin por el que se produce una organizacin de un conjunto de elementos en grados o niveles de responsabilidad, de incumbencia o de composicin entre otros

  • Bases de la Programacin

    Jerarqua por grado de composicin

  • Bases de la Programacin

    Jerarqua por grado de clasificacin

  • Evolucin de los lenguajes de programacin

    Cdigo Mquina

    Lenguaje Ensamblador

    Programacin de alto nivel

    Programacin estructurada

    Programacin modular

    Tipo Abstracto de datos

    POO

  • Evolucin de los lenguajes de programacin

    Cdigo Mquina

    Abstraccin: {0,1}

    Encapsulacin: Nula

    Modularizacin: Nula

    Jerarquizacin: Nula

  • Evolucin de los lenguajes de programacin

    Lenguaje Ensamblador

    Abstraccin: Identificadores

    Encapsulacin: Nula

    Modularizacin: Macros

    Jerarquizacin: Nula

  • Evolucin de los lenguajes de programacin

    Programacin de alto nivel

    Abstraccin: Subprograma

    Encapsulacin: mbito de subprogramas

    Modularizacin: Estructuras de control de flujo y Subprograma

    Jerarquizacin: Estructuras de control de flujo y Subprograma

  • Evolucin de los lenguajes de programacin

    Tipos Abstractos de Datos (TADs)

    Conjunto de valores lcitos y operaciones que operan sobre dichos datos

    Tipo definido por el usuario que permite definir mltiples variables de dicho tipo

    Programacin Orientada a Objetos

    Surge a partir de los TADs y del concepto de herencia heredado de IA

    La herencia permitir crear jerarquas por grado de clasificacin

  • Evolucin de los lenguajes de programacin

    Tipos Abstractos de Datos (TADs)

    Abstraccin: Total

    Encapsulacin: Total

    Modularizacin: Total

    Jerarquizacin: jerarquas de dependencia

    jerarquas de composicin

  • Evolucin de los lenguajes de programacin

    Programacin Orientada a Objetos

    Abstraccin: Total

    Encapsulacin: Total

    Modularizacin: Total

    Jerarquizacin: jerarquas de clasificacin

  • Evolucin de los lenguajes de programacin

    Abstraccin

    Encapsulacin

    Modularizacin

    Jerarquizacin

    +Aumento de la

    Comprensin del Software

    + Legibilidad

    +Facilidad de Mantenimiento

    -Costes

  • Evolucin de los lenguajes de programacin

    Objetivo

    Creacin de

    Cdigo

    Coste de

    Mantenimiento

    El objetivo es utilizar la abstraccin, encapsulacin, modularizacin

    y jerarqua para que el coste de mantenimiento del software no

    supere un determinado umbral por mucho que aumente el tamao del

    cdigo.

  • Evolucin de los lenguajes de programacin

    Leyes de Lheman y Belady

    Ley del Cambio Continuo Un programa que se usa en un mbito del mundo

    real, necesariamente debe cambiar o convertirse cada vez en menos til

    Ley de la Complejidad Creciente

    Debido a que los programas cambian por evolucin, su estructura se convierte en ms compleja a menos que se hagan esfuerzos activos para evitar este fenmeno

  • Lenguajes

    Cronologa resumida: Fortran (1958)

    LISP (1959)

    BASIC (1964)

    Pascal (1969)

    Prolog (1971)

    C++ (1986)

    Object Pascal (1988)

    CLOS (1989)

    Java (1995)

  • Pensando Orientado a Objetos

  • Orientacin a Objetos

    OOP (Object Oriented Programming) es una idea distinta de otras en programacin

    OOP es un paso en la evolucin de previos abstracciones de programacin

  • Por qu OOP es popular?

    La esperanza que rpidamente y fcilmente conducir a aumentar la productividad y mejorar confiabilidad. De la mano viene Diseo

    Orientado a Objetos.

    El deseo de una transicin simple de lenguajes existentes

    La similitud con tcnicas de pensamiento sobre problemas en otras reas

  • Por qu OOP es popular?

    La programacin de un computador an es una de las tareas ms difciles enfrentadas por el hombre;

    Llegar a ser hbil en programacin requiere talento, creatividad, inteligencia, lgica, la habilidad de construir y usar abstracciones, y experiencia.

    Programacin Orientada al Objeto es una nueva forma de pensar sobre qu significa hacer cmputos, sobre cmo podemos estructurar informacin al interior de un computador.

  • Lenguaje y Pensamiento

    En otras palabras la forma como hablamos influye en la manera como vemos el mundo (y viceversa).

    Esto es vlido no slo para los lenguajes naturales (espaol, ingls, mapuche...) sino tambin para los lenguajes artificiales como los de programacin (C, Pascal, C++, Java...)

    Ejemplo: En MATLAB los loops son lentos de procesar, pero las

    matrices son muy rpidas. Se sugiere ver las soluciones operando matrices y no va ciclos for.

    Corolario: los nombres de objetos e identificadores son relevantes. Despus de un tiempo no hay pensamiento slo nombres en el cdigo.

  • Lenguaje y Pensamiento (Cont.)

    Hiptesis de Whorf: Trabajando en un lenguaje, es posible que un individuo imagine pensamientos o ideas que no pueden ser trasladadas o entendidas por individuos trabajando en otro contexto lingstico. Entendemos los problemas de origen tnico y religioso en algunos pases del planeta? Blanco, blanco, blanco, blanco Qu lquido toma la vaca? => nuestro conocimiento da forma a nuestras soluciones

    Conjetura de Church: Cualquier computacin para la cual existe un procedimiento efectivo puede ser realizada por una mquina de Turing. (sta dispone de una mquina de estados y una cinta donde se puede escribir y borrar). En los 60s se demostr que esta mquina poda ser emulada por cualquier lenguaje con la sentencia condicional. => Una mquina muy simple puede resolverlo todo

  • Lenguaje y Pensamiento (Cont.)

    Entonces en qu quedamos, estas dos ideas parecen contradictorias. Hay ideas que no son entendidas en otros contextos lingsticos v/s la mquina de Turing con slo sentencia if es capaz de hacerlo todo. Para qu aprender otra cosa?

    Tcnicas de orientacin al objeto no proveen ninguna capacidad computacional nueva que permita resolver problemas no solubles por otros medios. Pero estas tcnicas conducen a soluciones ms fciles y naturales (para el hombre) y favorecen la administracin de grandes proyectos.

  • Computacin como Simulacin

    Ustedes pueden estar acostumbrados al modelo proceso-estado. Al estilo de la mquina de Von Newman. El computador sigue un patrn de instrucciones, organizadas en la memoria, saca valores desde varias localizaciones, los transforma, y pone resultados en otras localizaciones.

    Este modelo no ayuda mucho para entender cmo resolver problemas reales. No es la forma de pensar y ver las cosas.

    La visin de la OOP es crear un universo y es en muchas formas similar al estilo de la simulacin llamado simulacin conducida por eventos

    En OOP, tenemos la visin de computacin como simulacin.

    Cuando los programadores piensan en los problemas en trminos de comportamientos y responsabilidades de objetos, ellos aprovechan su gran intuicin, ideas, y entendimiento ganado con la experiencia diaria.

    Ver ejemplo lneas y puntos

  • 2010-II PRG II - ALGO II- UNMSM 34

    Tratando la complejidad

    Los problemas ms complejos son comnmente abordados por un equipo de programadores.

    La interconexin entre componentes es tradicionalmente complicada y por ello gran cantidad de informacin debe ser intercambiada entre los integrantes de un equipo.

    La incorporacin de ms gente puede alargar el proyecto en lugar de acortarlo.

    El principal mecanismo para controlar la complejidad es la abstraccin. sta es la habilidad de encapsular y aislar localmente informacin de diseo.

  • Una nueva forma de ver el mundo

    Supongamos que deseo enviar flores a mi abuelita. Una forma es ir a la florera y pedirlo a la vendedora. Le doy el tipo de flores y la direccin donde enviarlas.

    Yo busco un agente (la vendedora) y le paso un mensaje con el requerimiento. Es la responsabilidad de la vendedora el enviar las flores. Hay un mtodo, conjunto de operaciones o algoritmo, usado por a vendedora para hacer esto. Yo no necesito conocer el detalle de este mtodo.

    Las acciones son iniciadas en OOP por la transmisin de un mensaje (invocacin de un mtodo) a un agente (un objeto) responsable por la accin.

    Dos ideas: Ocultar informacin (hacer saber slo lo indispensable o principio de Information Hiding) y Reutilizacin. Sacarse la idea de tener que escribir todo y no usar servicios de otros (delegar).

    Dos importantes diferencias entre invocar Procedimientos y Mensajes

    En mensajes hay un receptor designado, en procedimientos no.

    La interpretacin del mensaje (mtodo) depende del receptor. Por ejemplo, mi esposa no actuara igual si le pido enviar las flores.

    Usualmente el receptor de un mensaje no se conoce hasta tiempo de ejecucin. Decimos que la ligazn entre mensajes (nombre de funcin, procedimiento o mtodo) y el fragmento de cdigo (implementacin) usado para responder es determinada en tiempo de ejecucin.

  • Reutilizacin del software

    La gente se ha preguntado con frecuencia por qu el software no puede semejarse a la construccin de objetos materiales. stos normalmente son construidos a partir de otros elementos ya existentes y depurados.

    Por ejemplo: El acceso a una tabla indexada para buscar objetos es una operacin comn en programacin; sin embargo, esta operacin es re-escrita en cada nueva aplicacin. Normalmente esto pasa porque los lenguajes tradicionales tienden a relacionar muy fuertemente el tipo del elemento con el cdigo para insertar o buscar los elementos.

    El uso de tcnicas de programacin orientada al objeto debera conducir a generar gran nmero de componentes de software re-utilizables.

  • Ejemplo: Un Stack

    Este ejemplo ilustra las limitaciones de algunos lenguajes para ocultar informacin y desacoplar tareas.

    int datastack[100]; int datatop = 0; void init() { datatop=0; } void push (int val) { if (datato 0 ) return (datastack [datatop-1]); }

    int pop() { if (datatop >0) return (datastack [--datatop]);

    return 0; }

    Los datos del stack no pueden ser

    locales a cada funcin

    Slo hay dos opciones: Locales o

    Globales -> Globales

    Globales -> no hay forma de

    limitar la visibilidad de esos

    nombres.

    El nombre datastack debe estar en

    conocimiento de los otros

    programadores.

    Los nombre init, pus, top, pop, ya

    no pueden ser usados.

  • Ejemplo: Un Stack

    Definiendo el alcance dentro de un bloque (como en Pascal)

    begin var datastack: array [1..100] of integer; datatop: integer; procedure init; .... Procedure push(val: integer); .... Procedure pop : integer; .... .....

    end;

    Al dar acceso a la interfaz (o protocolo o nombre de funciones y profedimientos), tambin se est dando acceso a sus datos comunes (datatop) , al dar acceso los nombres quedan tomados.

    La idea est contenida en los dos principios de David Parnas: 1.- Proveer al usuario (otro programador, por ejemplo) toda la informacin necesaria para usar correctamente un mdulo, y NADA MS. 2.- Se debe proveer al implementador con toda la informacin que l necesita para completar el mdulo, y NADA MS.

  • Responsabilidades

    Un concepto en OOP es describir comportamientos en trminos de responsabilidades. Esto permite aumentar el nivel de abstraccin y mejora la independencia entre agentes (importante para resolver problemas complejos).

    La coleccin de responsabilidades asociadas con un objeto es descrita por el trmino protocolo.

    No pregunte por lo que t puedes hacer a tu estructura de datos, sino pregunta lo que tu estructura de datos puede hacer por ti.

  • 2010-II PRG II - ALGO II- UNMSM 40

    Clases e Instancias

    Nosotros siempre tenemos una idea de las cosas ms all de ellas mismas. La vendedora es una instancia de una categora o clase (por ejemplo Florista).

    Todos los objetos son instancias de alguna clase.

    Los objetos son entes que tienen nombre, comportamiento y estado.

  • 2010-II PRG II - ALGO II- UNMSM 41

    Jerarqua de clases y herencia

    El hecho que el conocimiento de una categora ms general es tambin aplicable a una categora especfica se

    conoce como Herencia.

    Decimos que la clase Florista hereda los atributos de la clase Vendedor, y sta hereda de la clase Humano, y sta hereda de la clase

    Mamfero .... Se establece as una Jerarqua de clases.

  • 2010-II PRG II - ALGO II- UNMSM 42

    Jerarquas de Clases

    Las clases pueden ser organizadas en estructuras de herencia jerrquicas.

    Una clase hijo (O subclase) hereda atributos de la clase padre. Una clase abstracta no posee instancias directas y es slo usada para crear subclases. Por ejemplo Mamfero

    Objeto Material

    Animal Planta

    Mamfero

    Perro Humano

    Vendedor Ingeniero

    Florista

    Marta (mi florista) Pluto

    Flor

    Flores de mi abuelita

    Clavel

    Ingeniero Electrnico

    Agustn Instancias u Objetos

    Clases

  • Objetos-Mensajes, Herencia, y Polimorfismo

    Paso de mensajes: En OOP las acciones son iniciadas por un requerimiento a un objeto especfico. (analoga: invocacin de procedimiento es a procedimiento como mensaje es a mtodo)

    Lo previo es nada ms que un cambio de nfasis. Qu es ms natural: llamar a la rutina push con stack y dato como parmetros o pedirle a un stack hacer un push de un dato?

    Implcito est la idea que la interpretacin del mensaje puede variar con diferentes objetos (polimorfismo). Los nombres no necesitan ser nicos.

    Se pueden usar formas ms simples que conducen a programas ms lebles y entendibles.

    La Herencia permite a diferentes tipos de datos compartir el mismo cdigo (=> menor tamao de cdigo y mayor funcionalidad).

    Polimorfismo: Hay varias formas de l. La idea bsica es usar el mismo nombre o mensaje para referirse a cosas muy similares. Por qu debera darle un nombre distinto a la funcin push cuando insertamos un real -float- o insertamos un carcter -char?

  • Pilares de la POO

  • Pilares de la P.O.O.

    La POO (Programacin Orientada a Objetos) se basa en cuatro conceptos:

    Abstraccin Encapsulacin Herencia Polimorfismo

  • Abstraccin

    Ignorancia selectiva

    Decide que es importante y que no lo es

    Se enfoca [depende] en lo que es importante

    Ignora [no depende] de lo que no es importante

    Utiliza la encapsulacin para reforzar la abstraccin

  • Encapsulamiento

    Acelera()

    velocidad

    Frena()

    Facilita el manejo de la complejidad

    slo se conoce el comportamiento pero no los detalles internos

    nos interesa conocer qu hace la Clase pero no saber cmo lo hace

  • Herencia

    Es un tipo de relacin Relacin es un

    Entre Clases

    Va de la generalizacin a la especializacin

    Clase base

    Clase derivada

    Hereda la implementacin Automvil

    Transporte

    Acelera

    Frena

  • Jerarquas de Clase

    Transporte

    Martimo Aire Nieve Tierra

    DentroAtmosfera FueraAtmosfera 1-Persona N-Personas

  • Polimorfismo

    Literalmente significa tomar varias formas

    Tareas similares son realizadas por mtodos con mismo nombre

    Suma Enteros Decimales Fracciones

    Simplifican la tarea del desarrollador, al no tener que recordar distintos nombres para comportamientos iguales.

  • Polimorfismo

    La definicin del mtodo reside en la clase base

    La implementacin del mtodo reside en la clase derivada

    La invocacin es resuelta al momento de ejecucin

    Early binding

    Late binding

    Cohete

    Acelera

    Frena Transporte

    Acelera

    Frena

    Auto

    Acelera

    Frena

    Caballo

    Acelera

    Frena

  • PRG II - ALGO II- UNMSM 52

    Entorno en Java y Diseo orientado a objetos

  • Java: Motivaciones de su origen

    Deja atrs caractersticas problemticas:

    Punteros

    Asignacin de memoria (malloc)

    Herencia mltiple

    Sobrecarga de operadores

    Independiente de:

    Tipo de computador

    Sistema operativo

    Sistema de ventanas (win32, Motif, etc...)

  • Tiempo

    Compilacin

    Compilacin

    PC

    +JVM

    Mac

    +JVM

    *unix

    +JVM

    Texto

    fuente

    Java

    bytecode

    PC

    Mac

    *unix

    JVM es la Java Virtual Machine,

    Una para cada plataforma.

    Tiempo Carga y

    ejecucin

  • Trabajando con Java

    Creacin programa: Con editor crear programa *.java (FirstSample.java)

    Hacer uso de documentacin en manuales.elo.utfsm.cl

    Compilacin: va el comando el lnea $ javac FirstSample.java

    Ejecucin: $java FirstSample

    Hay ambientes de trabajo ms amigables para hacer estas tareas.

    Diseo

    Editor

    FirstSample.java

    $javac FirstSample.java

    FirstSample.class

    $java FirstSample

  • Editores de texto

    Recomiendo aprender a digitar bien.

    Emacs (win o Linux), Kate (linux),

    Usar ambientes integrados de Desarrollo

    (IDE) como:

    Jgraps

    Eclipse

    netbean

    Hay otros, ver conveniencia.

    No usar notepad o similar.

  • Sistema de Desarrollo

    Lo puede bajar de SUN:

    http://java.sun.com

    Versiones:

    Java EE (Enterprice Edition),

    Java SE (Standar Edition),

    Java ME (Micro-Edition)

  • JAVA EN TODO LUGAR

  • Java esta en todo lugar

  • Enterprise

  • JAVA Y EL MERCADO

  • Empresas

  • El Mercado en nmeros

    Informacion de JavaOne:

    900+ millones de microcomputadoras corriendo Java

    300 millones de descargas de Java desde junio del 2003

    12 millones de visitas por mes al sitio java.com

    5 millones de desarrolladores Java en el mundo

    180,000 desarrolladores registrados en java.net

    1+ billon de celulares corriendo java alrededor del mundo

  • El Mercado en nmeros

    Informacion de JavaOne:

    635 modelos de celular en el mundo con Java

    32 fabricantes de celulares con soporte para Java

    140 operadoras de telefonia movil usando Java

    3 millones de descargas de JavaEE

    28 tipos diferentes de servidores Java

    eBay confia en Java para sus ventas que traspasan los $1,400.00 por segundo!

  • El mercado en numeros

    Se estima que Java mueve $100 billones al ao y va en aumento

    Sun esta en mas de 170 paises

    100% de las 500 mayores empresas del mundo (segn revista Fortune) usan Java

    Sun cambio su nombre en la Bolsa de Valores; antes SUNW, ahora JAVA

  • El mercado en numeros

    Segn el Instituto Gartner:

    Java es la tecnologia escogida por las empresas; 60% lo usan, 22% planean hacerlo.

  • Empleos

    Oportunidades:

    Muchas vacantes apareciendo

    Pocos capacitados, pocos certificados

    Buenos salarios

    Mercado en optima fase de crecimiento!

  • Empleos

    Cuanto gana al mes un programador Java?

    EEUU $4500

    Chipre $2000

    Austria $1500-3500

    Alemania $2000-4500

    Suiza $4000-8000

    Rusia $800-1000

    Reino Unido $4000-8000

    Francia: $2000-4000

  • Certificaciones

    Sun realiza pruebas para certificar profesionales en la plataforma Java

    Profesional certificado posee reconocimiento en el mercado

    Lamentablemente todavia no tiene tanto efecto en el salario.

  • Las certificaciones

  • Comunidades

  • Java y el Software Libre

    Muchos proyectos en SourceForge

    Primer lugar en FreshMeat

    Java.net: 180,000 miembros en mas de 1,500 proyectos

    Mas de 550 grupos de usuarios en el mundo

  • Como participar? Que pueden hacer por

    usted?

    Noticias

    Articulos y tutoriales

    Foros

    Descargas

    Eventos

    Etc.

    Que puede hacer usted?

    Registrarse en foros

    Participar respondiendo dudas

    Escribir articulos

    Enviar noticias

    Etc.

  • Futuro y tendencias

  • Tendencias

    JavaME, aplicaciones para celulares

    Mercado con gran crecimiento

    Apoyo de las empresas telefonicas

    Aun no se sabe todo lo que es posible hacer

  • Tendencias

    Programacion Orientada a Aspectos (AOP):

    Creada en 1997 por Xerox

    Base de muchos frameworks importantes y conocidos

    Arquitectura Orientada a Servicios (SOA):

    Implementacion de aplicaciones con servicios compartidos

  • Tendencias

    Web 2.0 y AJAX:

    Nuevo concepto para el desarrollo de paginas y sistemas web.

    En torno a los usuarios

    Contenido creado por los usuarios para los usuarios

    Necesidad de interfaces ricas y de alta usabilidad

  • ?

  • Cmo diseamos programas de computacin?

  • Modelado

    En todas las aplicaciones, los programadores crean modelos

    Programas modelas el comportamiento de objetos del mundo real

    Necesitamos una formalidad para crear modelos de software de los objetos que un programa maneja

    El diseo de software orientado a objetos usa

    Clases de objetos (class)

    Mtodos que manipulan esos objetos

    Problema Modelo Sub-modelos

    Clima Atmsfera Nubes, mar, viento

    Obra Civil Puente Torres, cubierta, pilares

    Contabilidad Libro contable Clientes registro, registro

    ahorros

    Juego Mundo virtual Dragones, calabozos

  • Diseo Orientado a Objetos

    Clases Son las abstracciones del sistema.

    Definen el comportamiento de un grupo similar de objetos

    Comportamiento

    Colapsa con vientos sobre 50km/h.

    Flexin de cubierta proporcional a la carga.

    Puede ser creado con ms de una vida.

    Si le cae un rayo de ms de 4 GVolts, se encoge y

    transforma en un montculo de polvo de oro.

    Cada cuenta puede tener distinta tasa de inters.

    Slo se permite retiros de hasta 200 K$ diarios.

    Clase

    Puente

    Dragon

    Cuenta

    bancaria

  • Diseo orientado a objetos

    Clases Las definiciones de clases son

    abstracciones.

    Ellas definen el comportamiento de la abstraccin.

    El cmo es logrado ese comportamiento no es materia de quien usa la clase, sino slo de quien la implementa.

    Las clases son cajas negras.

    En su implementacin las clases definen tambin atributos para las abstracciones.

  • Calculadora

  • Calculadora

  • Calculadora

  • Calculadora

  • Clases

    Cada clase define comportamientos o responsabilidades o mensajes que pueden ser enviados a la clase

    Puntos

    Tienen distancia desde origen

    puede ser trasladados, ...

    Lneas

    tienen largo, pendiente

    puede interceptar otra, ...

    Rectngulos tienen

    largo, ancho, diagonal

    permetro, rea, .

  • Una Clase- mltiple objetos

    Podemos instanciar (crear) mltiple objetos de una misma clase

    crear puntos en diferente lugar del espacio

    crear conjunto de lneas - todas con diferentes pendientes y largos

  • Clases e invocacin de mtodos

    Luego de crear un objeto, podemos aplicar operaciones de su clase a ste

    Encontrar la distancia de un punto al origen

    Mover un punto a una posicin nueva

    Determinar el largo de la lnea

    Preguntar si dos lneas se interceptan

    Formalmente, decimos que invocamos mtodos o enviamos mensajes de la clase a un objeto de la clase.

  • Clases

    Cada clase tiene dos componentes

    atributos

    especifican o califican el estado o las caractersticas individuales de un objeto

    Punto: coordenadas x, y

    Rectngulo: ancho, alto

    RectanguloLleno: color (red, green, blue, . )

    mtodos Sigue =>

  • Clases

    Mtodos

    Operaciones o servicios sobre objetos de una clase

    Crear (constructor) y destruir objetos

    obtener valores de los atributos de un objeto

    Encontrar coordenadas x, y de un punto

    Encontrar el largo de una lnea

    Encontrar el permetro de un rectngulo

    modificar los atributos de un objeto

    trasladar un punto cambiando sus coordenadas

    estirar un lnea

    expandir un rectngulo cambiando su ancho y alto

  • Ejemplo de clase

    Rectangle

    Consideremos primero los mtodos:

    para hacer la clase ms til, definimos

    Rectangle crea (construye) un rectngulo

    getWidth obtiene el ancho

    getHeight obtiene el alto

    setWidth cambia el ancho

    SetHeight cambia el alto

    getPerimeter calcula el permetro

    getArea calcula el rea

  • Ejemplo de clase

    Rectangle

    Consideremos primero los mtodos:

    para hacer la clase ms til, definimos

    Rectangle crea (construye) un rectngulo

    getWidth obtiene el ancho

    getHeight obtiene el alto

    setWidth cambia el ancho

    SetHeight cambia el alto

    getPerimeter calcula el permetro

    getArea calcula el rea

    Notar la convencin de nombres en Java operationTarget

    minscula Mayscula inicial

    No es obligacin ..

    Fuertemente recomendada -

    la API de Sun la usa

  • Ejemplo de clase- Cdigo java

    Rectangle.java

    class Rectangle {

    private double width, height; // atributos

    public Rectangle( double w, double h ) { // constructor

    width = w; // fija atributos segn

    height = h; // parmeteros

    }

    double Height( ) {

    return height; // simplemente retorna

    } // valor de atributo

    double Width( ) {

    return width;

    }

    double getArea( ) {

    return width*height; // retorna el valor de un atributo

    } // el cual es calculado

    double getPerimeter( ) {

    return 2.0*(width + height);

    }

    void setHeight( double h ) { // actualizacin (mutador) height = h; // cambia el valor de un atributo

    }

    void setWidth( double w ) {

    width = w;

    }

    }

  • Ejemplo de clase- Cdigo java

    Rectangle.java

    class Rectangle {

    private double width, height; // atributos

    public Rectangle( double w, double h ) { // constructor

    width = w; // fija atributos segn

    height = h; // parameteros

    }

    double Height( ) {

    return height; // simplemente retorna

    } // valor de atributo

    double Width( ) {

    return width;

    }

    double getArea( ) {

    return width*height; // retorna el valor de un atributo

    } // el cual es calculado

    double getPerimeter( ) {

    return 2.0*(width + height);

    }

    void setHeight( double h ) { // actualizacin (mutador) height = h; // cambia el valor de un atributo

    }

    void setWidth( double w ) {

    width = w;

    }

    }

    class Rectangle {

    private double width, height; // atributos

    .......

    }

    Nombre de la clase

  • Ejemplo de clase- Cdigo java

    Rectangle.java

    class Rectangle {

    private double width, height; // atributos

    public Rectangle( double w, double h ) { // constructor

    width = w; // fija atributos segn

    height = h; // parameteros

    }

    double Height( ) {

    return height; // simplemente retorna

    } // valor de atributo

    double Width( ) {

    return width;

    }

    double getArea( ) {

    return width*height; // retorna el valor de un atributo

    } // el cual es calculado

    double getPerimeter( ) {

    return 2.0*(width + height);

    }

    void setHeight( double h ) { // actualizacin (mutador) height = h; // cambia el valor de un atributo

    }

    void setWidth( double w ) {

    width = w;

    }

    }

    class Rectangle {

    private double width, height; // atributos

    .......

    }

    Nombre de la clase

    Delimitadores de bloque

  • Ejemplo de clase- Cdigo java

    Rectangle.java

    class Rectangle {

    private double width, height; // atributos

    public Rectangle( double w, double h ) { // constructor

    width = w; // fija atributos segn

    height = h; // parameteros

    }

    double Height( ) {

    return height; // simplemente retorna

    } // valor de atributo

    double Width( ) {

    return width;

    }

    double getArea( ) {

    return width*height; // retorna el valor de un atributo

    } // el cual es calculado

    double getPerimeter( ) {

    return 2.0*(width + height);

    }

    void setHeight( double h ) { // actualizacin (mutador) height = h; // cambia el valor de un atributo

    }

    void setWidth( double w ) {

    width = w;

    }

    }

    class Rectangle {

    private double width, height; // atributos

    .......

    }

    Nombre de la clase

    Delimitadores de bloque

    Atributos

  • Ejemplo de clase- Cdigo java

    Rectangle.java

    class Rectangle {

    private double width, height; // atributos

    public Rectangle( double w, double h ) { // constructor

    width = w; // fija atributos segn

    height = h; // parameteros

    }

    double Height( ) {

    return height; // simplemente retorna

    } // valor de atributo

    double Width( ) {

    return width;

    }

    double getArea( ) {

    return width*height; // retorna el valor de un atributo

    } // el cual es calculado

    double getPerimeter( ) {

    return 2.0*(width + height);

    }

    void setHeight( double h ) { // actualizacin (mutador) height = h; // cambia el valor de un atributo

    }

    void setWidth( double w ) {

    width = w;

    }

    }

    class Rectangle {

    private double width, height; // atributos

    .......

    }

    Nombre de la clase

    Atributos

    Notar: salvo excepciones, los atributos deben ser privados private!

    En buenos diseos, las clases son

    Cajas negras!

  • Cajas negras?

    Una clase modela el comportamiento de algn conjunto de objetos similares en comportamiento.

    Los mtodos definen el comportamiento de una clase.

    Atributos?

    El implementador los elige

    No son de incumbencia del usuario

    Siempre y cuando la implementacin sea correcta!

    Ocultarlos en una caja negra

    El acceso a ellos va mtodos

    Ejemplo .... Puntos en espacio 2-D

  • Principio de ocultacin de la informacin

    Nuestro usuario intrigado puede ver

    nombre de la clase

    mtodos:

    XCoord, YCoord, Distance, Angle

  • Principio de ocultacin de la informacin

    Mirando dentro, el usuario puede ver dos conjuntos de atributos diferentes!

  • Principio de ocultacin de la informacin

    El usuario se da cuenta que no necesita saberlo!

    El usuario slo quiere usar los puntos para hacer lneas!

  • Estructuras bsicas Java

  • Primer programa en Java

    Todo programa debe tener al menos una clase.

    Toda aplicacin Java debe tener el mtodo main como el mostrado.

    System.out es un objeto al cual le invocamos el mtodo println.

    Ver: FirstSample.java

    public class FirstSample

    {

    public static void main(String[ ] args) {

    System.out.println("We will not use 'Hello, Sansanos!'");

    }

    }

    Nombre de archivo = FirstSample.java

  • Trabajando con Java

    Desde http://java.sun.com/

    Hay versiones para solaris, linux y windows.

    Ver: http://java.sun.com/javase/technologies/index.jsp

  • Instalacin

    Hay otras versiones: Enterprice Edition (J2EE) y la Micro Edition (J2ME).

    Instalacin en UNIX: Incorporar el el path del compilador en el entorno

    al final de .bashrc o .bashrc_profile.

    Por ejemplo: export PATH=/usr/local/jdk/bin:$PATH

    En Windows hacer lo equivalente (depende de su OS)

    Control Panel -> System -> Environment. Avanzar hasta las variables de usuario y buscar la variable PATH. Agregar el directorio jdk\bin al comienzo. Ej c:\jdk\bin; otras rutas.

  • Ambientes de desarrollo

    Hay varios. Lo ms bsico es usar un editor de texto, escribir los programas, compilar y ejecutar en la lnea de comandos. En esta opcin yo uso emacs o xemacs como editor.

    Jgrasp: http://www.jgrasp.org/ Ambiente desarrollado en Java para desarrollo de programas.

    Otros: kate en linux, netbean de Sun.

    Jedit: http://www.jedit.org/ Tambin escrito en Java.

    Eclipse (usuarios sealan que requiere ms mquina)

  • Aspectos bsicos: Tipos primitivos (no son objetos)

    Booleano

    boolean

    true and false

    Enteros int 4 bytes Ej: 24, 0xFA, 015

    short 2 bytes

    long 8 bytes Ej: 400L

    byte 1 byte

    Punto flotante

    float 4 bytes Ej: 3.14F (6-7 dgitos signif.)

    double 8 bytes Ej: 3.14D (15 dgitos signif.)

  • Tipos primitivos (no son objetos)

    Carcter: char

    Unicode

    Usa dos bytes

    Diseado para internacionalizacin

    Comillas simples: a, A, !, 1, ...

    Forma hexadecimal \u0008 (Unicode backspace)

    El byte menos significativo corresponde al ASCII de 8 bits.

    No visibles : Ej:

    \b backspace \t tab

    \n linefeed \r return

    \ double quote \ single quote

    \\ el mismo backslash!

  • Constantes

    Se usa la palabra reservada final

    Ej: public final float CM_PER_INCH=2.54;

    Si deseamos crear slo una instancia de esta constante para todos los objetos de una clase, usamos:

    public class Constante

    {

    public static final float MC_PER_INCH=2.54;

    ...}

    El valor se accede: Constante.CM_PER_INCH

  • Cambios de tipo automticos

    byte int

    char

    float

    short

    double

    long Puede perder

    informacin

  • Operadores y su precedencia

    [] . ( ) (invocacin)

    ! ~ ++ -- + - ( ) new

    * / %

    + -

    > >>>

    < >= instance of

    == !=

    &

    ^

    |

    &&

    ||

    ? :

    = += -= *= /= %= &= |= ^= = >>>=

  • String

    Java tiene una clase pre-definida llamada String.

    Todos los string son objetos y su comportamiento est dado por la clase (ver documentacin).

    El operador + concatena strings. Si uno de los operandos no es string, Java lo convierte string y

    luego lo concatena. Ej: int nCanal=13; String estacion = Canal+nCanal;

    Para comparar dos strings, usar el mtodo equals.

    El nombre de un objeto es una referencia al objeto (direccin), no el objeto mismo.

  • Entrada y Salida

    La salida de texto por consola es simple haciendo uso del objeto System.out. Es decir atributo out de la clase System.

    Hasta la versin 1.4 la entrada era bastante engorrosa. Esto se simplifica en

    V1.5

    Formas grficas de entrada y salida se vern despus.

    Las clases principales a estudiar son:

    Java.io.PrintStream (desde Java 1.0), y

    Java.util.Scanner (desde Java 1.5)

  • Salida de datos simple a consola

    Desde la versin 1.0 de Java existe la clase java.io.PrintStream.

    Define mtodos para la salida de stream va buffer.

    Los caracteres son puestos en memoria

    temporalmente antes de salir a consola.

    Los mtodos son:

    print(Object o): invoca mtodo toString e

    imprime resultado.

    print(String s): imprime string s.

    print(tipo_bsico b): imprime el valor de b

    println(String s): Imprime s seguido de newline.

  • Entrada de datos simples por consola

    El objeto especial para efectuar entrada de datos es System.in; sin embargo, ste no ofrece mtodos

    cmodos (es instancia de InputStream).

    Para facilitar la entrada de datos se cre a partir de

    la versin 1.5 la clase Scanner, en paquete java.util,

    la cual trabaja como envoltorio o recubriendo

    (wrapper) la clase InputStream.

    Scanner tiene varios mtodos convenientes para la

    entrada de datos.

    Ver ejemplo: InputExample.java

  • Mtodos de Java.util.Scanner

    Ver documentacin

    Revisar mtodos:

    hasNext(): hay ms datos en entrada?

    next(): retorna prximo token.

    hasNextType(): Type es tipo bsico. verdadro si

    hay dtal dato a continuacin. Type es boolena,

    Byte, Double, Float, Int, Long y Short.

    nextType(): retorna el dato del tipo Type a

    continuacin.

    Ver tambin: hasNextLine(), nextLine();

    findInLine(String s);

  • Entrada de datos simple va grfica

    Otra forma de ingresar datos es va la clase JoptionPane, en particular uno de sus mtodos: JoptionPane.showInputDialog(promptString); este llamado retorna el string ingresado por el usuario.

    Ver ejemplo: InputTest.java

  • Sentencias

    IF

    if( exp ) statement1; else statement2;

    if (a>b) x = a; else x = b;

    else // es opcional

    if ( x[i] > max ) max =

    x[i];

  • Sentencias - Bucles

    while while( exp ) statement1;

    while( exp ) { statements; }

    while (a>b) a = x[i++]; while ( x < 0 ) {

    x = getX( ... );

    y = y + x;

    }

    while permite evitar el viaje al bloque interno

  • Sentencias - Bucles

    do do statement; while( exp );

    do { statements; } while( exp

    );

    do a = x[i++]; while( a>z );

    do { x = getX( ... );

    y = y + x;

    } while ( x > 0 );

    do implica al menos un viaje

  • Sentencias - Bucles

    for for( exp1; exp2; exp3 ) { s; }

    equivalente a: exp1;

    while ( exp2 )

    { s; exp3; }

    for( k=0; k

  • Sentencias - switch

    switch( exp1 ) { case x1: s1; break;

    case x2: s2; break;

    default: s3;

    }

    Ejemplo: switch( x ) {

    case 1: y = a; break;

    case 2: y = b; break;

    default: y = c;

    }

  • Break y continue

    La sentencia break permite salir fuera del lazo de repeticin sin terminarlo (adems de su uso en switch).

    Tambin puede ser usada en conjunto con un rtulo para salir fuera de cualquier bloque. El rtulo va inmediatamente antes del bloque en cuestin.

    La sentencia continue transfiere el control de flujo al encabezado del lazo ms interno.

  • Clases para tipos de datos primitivos

    Envoltorios (Wrappers)

    Crean objetos para los tipos estndares. java.lang

    Boolean

    Integer

    Long

    Character

    Float

    Double

    Un mtodo importante en estas clases nos permite transformar un string que contiene nmeros en un

    tipo bsico. Ej: int a = Integer.parseInt(3425); hace que a tome el valor 3425. Se us en ejemplo InputTest.java

  • Objetos y Clases en Java

  • Creacin de objetos nuevos

    Se usa el constructor de la clase MiClase a = new MiClase();

    Todos los objetos son creados en el heap (memoria asignada dinmicamente durante la ejecucin).

    Lo que se retorna es una referencia al nuevo objeto (puede ser pensada como puntero).

    Nota no existe destructor (en C++ s) Java tiene un proceso de recoleccin de

    basura (Garbage Collection) que automticamente recupera zonas no

    referenciadas.

  • Constructores

    Tiene igual nombre que la clase

    Pueden tener parmetros

    Son invocados principalmente con new

    No tiene tipo retornado

    No return explcito

    Java provee constructor por defecto ()

    Podemos proveer uno o ms constructores. Esto es un tipo de sobrecarga de mtodos (igual nombre con distintos parmetros)

    El compilador busca el constructor usando firma nombre constructor + lista de parmetros

  • Constructores

    Inicializa objetos nuevos:

    1. Localiza memoria

    2. Asigna valores por defecto a variables (0, 0.0, null, )

    3. Llama constructor de Superclase (ms adelante)

    4. Sentencias restantes son ejecutadas

    La primera sentencia puede ser:

    super( ) para llamar al constructor de la clase base (o padre o superclase)

    this( ) invoca a otro constructor

  • Referencias

    Los objetos son referenciados

    Esta es una forma controlada de usar: Direcciones y punteros

    Al declarar una variable de una clase obtenemos una referencia a la variable.

    En caso de tipos primitivos (8) se tiene la variable y acceso directo (no es referencia)

    byte, short, int, long, float, double, char, boolean

  • pejAcct.deposit(1000000); // error

    pejAcct = new Cheque("Peter", 1000, 40);

    pejAcct name

    balance

    chqNum

    Cheque pejAcct;

    pejAcct Referencia nula

    Definiendo variables

    Este ejemplo asume que la clase Cheque ya existe y posee miembros datos: name, balance y chqNum

  • Asignacin

    Cheque jmAcct;

    jmAcct

    jmAcct = pejAcct;

    pejAcct

    name

    balance

    chqNum

    jmAcct

  • Implicancias de referencias

    La identidad de objetos son referencias referencia significa puntero (i.e. no el contenido)

    = es copiar la referencia Usar mtodo clone para crear copia del objeto

    completo.

    == es comparacin de referencias Usar equals para comparar contenidos

    aMethod(pejAcct) pasa un referencia

    aMethod(tipo_bsico) pasa el valor

    return pejAcct retorna una referencia Usar clone para crear una copia, y luego retornarla

  • Control de acceso

    Modificador de acceso

    public

    protected

    omitido

    private

    Visibilidad

    Todas partes

    en sub-classes & pkg

    En el paquete

    Slo en la clase

    public

    private

    package

    protected

    Modificador Clase

    si si si si

    si si si no

    omitido si si no no

    si no no no

    Package Subclass World

    public

    protected

    private

  • Paquetes en Java (package)

    Existen para garantizar unicidad en los nombres de clases.

    Si queremos referirnos a la clase Date, podemos usar:

    java.util.Date hoydia = new java.util.Date();

    Una forma reducida es usar:

    import java.util.Date;

    Date hotdia = new Date();

    Si deseamos usar varias clases de un mismo paquete:

    import java.util.*;

  • Paquetes en Java (cont.)

    Para incluir una clase en un paquete, al inicio del archivo indicar:

    Package unmsm.sistemas.algoii.g2

    Esto implica que debe existir los directorios: unmsm, dentro de l sistemas, dentro de ste algoiiy finalmente el directorio g2. En este ltimo ponemos los archivos del

    paquete.

    Para compilar estos archivos usamos:

    javac unmsm/sistemas/algoii/g2/archivo.java Para correr el archivo usamos:

    java unmsm.sistemas.algoii.g2.archivo

  • Documentacin

    Para la clase ponerla inmediatamente antes de la clase y ser encerrado entre /** y */

    Para los mtodos: usar los rtulos

    @param variable descripcin

    @return descripcin

    @throws descripcin de clase

    Para los datos pblicos: /** ...*/

    Comentarios Generales:

    @author nombre

    @version texto

    @since texto

    @see link

    Ejemplo: @see

    unmsm.sistemas.algoii.Employee#raiseSalary(double)

  • Documentacin

    Se pueden usar todo tipo de rtulos html incrustados.

    Cmo generar la documentacin?: javadoc -d docDirectory *.java

    Para la documentacin de un paquete: javadoc -d docDirectory nameOfPackage

    Ejemplo: Account.java

    index.html generado con javadoc -d AccountDoc *.java

  • Rutas para clases

    Primero incluir la ruta del compilador y mquina virtual java en la variable PATH.

    Luego la ruta para la bsqueda de todas las clases: CLASSPATH

    El compilador y el interprete java buscan los archivos en el directorio actual.

    Si el proyecto est compuesto por varias clases en diferentes directorios, javac y java buscan las clases en los directorios indicados en la variable de ambiente CLASSPATH.

    En Linux ELO sta se configura con

    export CLASSPATH=/home/user/classdir1: /home/user/classdir2:.

    El Windows tambin se debe fijar la variable de ambiente.