algo prg2 intro
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.