Está en la página 1de 138

PRG II - ALGO II- UNMSM 1

Algoritmica II
Mg. Nehil Muoz Casildo
nehilmc@gmail.com
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 <100)
datastack [datatop++] = val;
}
void top () {
if (datatop >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)
! ~ ++ -- + - (<tipo o clase> ) 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(prompt
String); 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<n; k++ ) { s; }
equivale a:
k=0;
while( k<n ) { s; k++; }
Patrn estndar para n iteraciones!
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.