0% encontró este documento útil (1 voto)
212 vistas205 páginas

Java

Este documento introduce el lenguaje de programación Java. Explica que Java es un lenguaje orientado a objetos desarrollado por Sun Microsystems en los años 90. También cubre algunas características clave de Java como su enfoque multiplataforma, tipos de datos, variables, clases, objetos y más. Finalmente, proporciona un pequeño ejemplo de programa en Java.

Cargado por

Mario Werts
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (1 voto)
212 vistas205 páginas

Java

Este documento introduce el lenguaje de programación Java. Explica que Java es un lenguaje orientado a objetos desarrollado por Sun Microsystems en los años 90. También cubre algunas características clave de Java como su enfoque multiplataforma, tipos de datos, variables, clases, objetos y más. Finalmente, proporciona un pequeño ejemplo de programa en Java.

Cargado por

Mario Werts
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 205

Introduccin y Fundamentos del lenguaje de programacin

Java

Agenda
Qu es Java ? Caractersticas generales del lenguaje Variables Tipos de Datos Estructuras de control Orientado a Objeto: Clase, objeto, atributos, mtodos, constructores y mas.

Java
Tecnologa desarrollada por Sun Microsystems para aplicaciones software independiente de la plataforma, que engloba: Lenguaje de programacin Java API Java, proporciona a los programadores un entorno de desarrollo completo, as como una infraestructura. JVM, la mquina virtual que ejecuta bytecode de Java.

Java
Lenguaje de programacin orientado a objetos desarrollado por Sun Microsystems a principios de los 90 Las aplicaciones son compiladas en un bytecode, aunque tambin es posible la compilacin en cdigo de mquina nativo En tiempo de ejecucin, el bytecode es normalmente interpretado

Java
La promesa inicial era Write Once, Run Anywhere La idea era proporcionar un lenguaje independiente de la plataforma y un entorno de ejecucin ligero y gratuito

Tecnologa Java
La tecnologa Java incluye el lenguaje de programacin y la plataforma
Java es al mismo tiempo compilado e interpretado

Tecnologa Java
Genera byteCode

Implementacin de la Mquina Virtual Java

Tecnologa Java
Compile-time Environment
Class Loader Java Source (.java) Java Bytecodes move locally or through network Bytecode Verifier

Compile-time Environment
Java Class Libraries

Java Interpreter

Just in Time Compiler

Java Compiler

Java Virtual machine

Runtime System

Java Bytecode (.class )

Operating System

Hardware

Programa Simple
public class ProgramaSimple { public static void main(String[] args) { System.out.println("Este es + un programa simple"); System.exit(0); } }

Caractersticas del lenguaje

Caractersticas del Lenguaje


Sensible a las Maysculas / Minsculas
Distingue entre maysculas y minsculas. Los identificadores Papa, papa y PAPA son diferentes. No pueden comenzar con dgitos Los identificadores deben ser descriptivos Todas las palabras reservadas del lenguaje van en minsculas

Caractersticas del lenguaje


Estilo
Los programadores deben seguir ciertas convenciones en cuanto a estilo Los nombres de las clases deben empezar con mayscula, las siguientes palabras tambin inician en mayscula public class DanceFloor Los nombres de los mtodos, campos y variables empiezan con minscula y el resto de las palabras comienzan con mayscula private int stepsCount = 0; public void nextStep()

Caractersticas del lenguaje


Generalmente, los nombres de los mtodos suenan como verbos setBackground, getText, moveForward, stop Los nombres de los campos o atributos como nombres foot, picture, button, controlPanel Las constantes se especifican completamente en maysculas PI, PIXELS_PER_INCH Es OK usar nombres cortos estandares para variables temporales i, k, x, y, str

Caractersticas del lenguaje


Sintxis vs Estilo
Sintxis es parte del lenguaje. El compilador chequea este aspecto Estilo es una convencin ampliamente adoptada por los desarrolladores de software El propsito del estilo es mejorar la comprensin de los programas

Caractersticas del lenguaje


El compilador detecta errores de sintxis y genera mensajes de error Texto includo en comentarios y las cadenas de caracteres son excludas del chequeo sintctico Antes de compilar, lea cuidadosamente su cdigo para detectar errores sintcticos y lgicos

Caractersticas del lenguaje


Errores comunes de sintxis
Ortografa (p P, if If) Public static int abs (int x) { If (x < 0); { x = -x } return x; public static int sqrt (int x) ... Punto y coma extrao

Falta

Falta punto y coma

Caractersticas del lenguaje


Comentarios
Un bloque de comentario puede ser colocado entre las marcas /* y */
/* Exercise 5-2 for Java Methods Author: Miss Brace Date: 3/5/2010 Rev. 1.0 */

Un comentario de una sola lnea va desde // hasta el final de la lnea


weight *= 2.2046; // Convert to kilograms

Caractersticas del Lenguaje


Comentarios
/** comentario */ Los caracteres entre /** y */son ignorados y se incluyen en la generacin automtica de la documentacin.

Caractersticas del lenguaje


Usado por javadoc para la generacin automtica de documentacin en formato HTML a partir del cdigo fuente Debe preceder una clase, un mtodo o un campo Se pueden usar tags especiales de javadoc @param describe el parmetro de un mtodo @return - describe el valor de retorno de un mtodo

Caractersticas del lenguaje


/** indica un comentario javadoc

/** * * * * * */

Returns total sales from all vendors; sets <code>totalSales</code> to 0. @return total amount of sales from all vendors

Se pueden usar tags HTML

Estilo

Ejemplo javadoc

/** * Inserta un ttulo en la clase descripcin. * Al ser el ttulo obligatorio, si es nulo o vaco se lanzar * una excepcin. * * @param titulo El nuevo ttulo de la descripcin. * @throws IllegalArgumentException Si titulo es null, est vaco o contiene solo espacios. */ public void setTitulo (String titulo) throws IllegalArgumentException { if (titulo == null || titulo.trim().equals("")) { throw new Exception ("El ttulo no puede ser nulo o vaco"); } else { this.titulo = titulo; } }

Caractersticas del lenguaje


La disposicin de los elementos dentro del cdigo es libre Instrucciones o sentencias: lnea simple de cdigo terminada en ; Bloque de cdigo: Conjunto de sentencias agrupadas entre llaves.
{ X = x + 1; Y = y + 1; }

Java permite espacios en blanco entre elementos del cdigo


X1 = y * delta; X2 = (y-1) * delta;

Caractersticas del lenguaje


Estilo
Coloque cada sentencia en una lnea e indente el cdigo entre llaves Use conscientemente los comentarios. Comente constructores, mtodos, campos o atributos, pasos importantes pero no comente cada sentencia en su programa

Caractersticas del lenguaje


Estilo
public void nextStep() { if (stepsCount % 2 == 0) leftFoot. moveForward (2 * stepLength); else rightFoot. moveForward(2 * stepLength); stepsCount++; } public void nextStep() { if (stepsCount % 2 == 0) leftFoot.moveForward (2 * stepLength); else rightFoot.moveForward (2 * stepLength); stepsCount++; }

Compila bien

Ms fcil de leer

Caractersticas del lenguaje


Palabras Reservadas
Palabras con un significado especial para el compilador Ejemplos: Nombres de tipos bsicos: boolean, char, double, int, Indicadores de control: do, if, else, for, while, Class, interface, extends, implements package, import this, super Modificadores de acceso: public, private, protected Constantes: true, false, null

Caractersticas del lenguaje


public void fill (char ch) { int rows = grid.length, cols = grid[0].length; for (int r = 0; r < rows; r++) { for (int c = 0; c < cols; c++) { grid[r][c] = ch; } } }
Agregar lneas en blanco para facilitar lectura

Agregar espacios alrededor de los operadores y despus de los puntos y comas

public void makeNextStep ( ) {


if (currentState == State.READY) {
amy.firstStep(); amy.firstStep(); ben.firstStep(); currentState = State.MOVING; stepsCount = 0;

Cuerpo del mtodo

Grupo de sentencias

} else if (currentState == State.MOVING) {


if (amy.distanceTraveled() <= danceFloor.getWidth() * 3 / 4) { Grupo de amy.nextStep(); ben.nextStep(); sentencias
stepsCount++;

Grupo de sentencias

} else {
amy.stop(); ben.stop(); currentState = State.STOPPED;

Grupo de sentencias

} danceFloor.update(this);

Variables

Variables
Una variable corresponde a una direccin de memoria que almacena un valor. q = 100 - q; significa 1. Leer el valor actual de q 2. Restar 100 de dicho valor 3. Mover el resultado a q

Variables
Las variables pueden ser de distintos tipos : int, char, double, boolean, etc. Las variables pueden contener objetos entonces el tipo de la variable es la clase del objeto El programador le da nombre a las variables Generalmente los nombres de las variables empiezan con una letra en minscula (por convencin)

Variables
Una variable debe ser declarada antes de su uso int count; x, y; go; amy; Nombre(s)

double Tipo JButton Walker

String firstName;

Variables
El operador de asignacin permite cambiar el valor de una variable
count = 5; x = 0; go = new JButton("Go"); firstName = args[0];

Una variable puede ser inicializada en su declaracin


int count = 5; JButton go = new JButton("Go"); String firstName = args[0];

Variables Alcance
Cada variable tiene un alcance el rea en el cdigo donde es visible Si usa una variable fuera de su alcance, el compilador reportar un error de sintxis Variables pueden tener el mismo nombre cuando sus alcances no se solapan
{ int k = ...; ... } for (int k = ...) { ... }

Variables
Las variables locales se declaran dentro de un constructor o en un mtodo Las variables locales pierden su valor y son destruidas cuando finaliza el constructor o mtodo El alcance de una variable local es desde su declaracin hasta donde cierra el parntesis del bloque en el cual fue declarado

Variables
public class SomeClass { ... public SomeType SomeMethod (...) {
Variable local declarada

Alcance

{ } } ... }

Variable local declarada

Variables
Usen variables locales cuando sea apropiado; nunca use atributos cuando debera usar una variable Nmbrelas de manera que puedan ser fcilmente distinguibles de los atributos Use el mismo nombre para variables locales usadas de la misma forma en distintos mtodos (por ejemplo, x, y para coordenadas, cont, count para un contador, i, k para ndices, etc.).

Variables
Errores comunes public void someMethod (...) { int x = 0; ... int x = 5; ...
Error de sintxis. Variable declarada dos veces dentro del mismo alcance

Variables
Errores comunes private double radius; ... public Circle (...) // constructor { double radius = 5; ...
radius ha sido declarada como atributo y como variable local; el valor del atributo radius se queda en 0.0

Tipos de datos primitivos

Tipos de datos primitivos

int double char boolean

byte short long float

Tipos de datos
String no es un tipo primitivo de datos String trabaja igual que cualquier objeto excepto por String entre comillas dobles representa constantes literales + y += concatena strings "Catch " + 22 "Catch 22"

Tipos de datos
Constantes literales
new line tab

'A', '+', '\n', '\t' -99, 2010, 0 0.75, -12.3, 8., .5 coin.gif", "1776", "y", "\n"

char int double String

Tipos de datos
Constantes simblicas son inicializadas como final private final int stepLength = 48; private static final int BUFFER_SIZE = 1024; public static final int PIXELS_PER_INCH = 6;

Tipos de datos Por qu Constantes Simblicas?


Fcil de cambiar su valor en un programa en caso de ser necesario Fcil de cambiar a una variable Facilita la lectura del cdigo

Operadores Aritmticos

Operadores
Operadores: +, -, /, * , % La precedencia de los operadores y parntesis es la misma que en algebra m % n es el resto cuando m es dividido por n (por ejemplo, 17 % 5 is 2; 2 % 8 is 2) % tiene el mismo rango que / y * Operadores binarios con el mismo rango se evaluan de izquierda a derecha

Operadores
El tipo del resultado viene determinado por el tipo de los operandos y no por sus valores. Esta regla aplica tambin para los resultados intermedios en una expresin Si uno de los operandos es entero y el otro es double, entonces el resultado es double. Si ambos operandos son enteros, el resultado ser entero

Operadores
Si a y b son enteros entonces a / b es truncado a un entero 17 / 5 3/4 3 0

an si asignamos el resultado a un double el resultado ser truncado a un entero double ratio = 2 / 3;

Operadores
Para obtener el resultado correcto, deben usar constantes dobles o el operador cast double ratio = 2.0 / 3; double ratio = 2 / 3.0; int m = ..., n = ...; double factor = (double)m / (double)n; double factor = (double)m / n; double r2 = n / 2.0;

Operadores
Devuelve un double int ptsOnDie = (int)(Math.random() * 6) + 1; int miles = (int)(km * 1.61 + 0.5); Convierte Km a Millas, redondeado al entero ms cercano

Estructuras de Control

if else

if ( <condition> ) { < statements > } else { < other statements > }

if ( <condition> ) { < statements > } la clusula else es opcional

Expresiones booleanas
Variables booleanas pueden tener slo dos posibles valores: true o false. Se definen igual que el resto de las variables o atributos
boolean true false
private boolean hasMiddleName; boolean isRolling = false; Palabras reservadas

Expresiones booleanas
En if (<condition> ) <condition> es una expresin booleana El resultado de una expresin booleana es true o false Las expresiones booleanas estn compuestas de variables booleanas y operadores lgicos y relacionales

Operadores relacionales
Operadores relacionales <, >, <=, >=, ==, != Hay que tener cuidado cuando se usan con objetos, pues en esos casos estamos comparando referencias (direcciones) en lugar de sus valores String cmd = console.readLine(); if ( cmd == "Help" ) ... incorrecto

Operadores relacionales
Usar los mtodos equals o equalsIgnoreCase para comparar Strings: o
String cmd = console.readLine(); if ( cmd.equals ("Help") ) ...

if ( "Help".equals (cmd) ) ...

Operadores relacionales
Mayor

! * + < && ||

-(unary) / <= > %

++

-- (cast)

>=

==

!=

Menor

Ms fcil de leer

if ( ( ( year % 4 ) == 0 ) && ( month == 2 ) ) ... if ( year % 4 == 0 && month == 2 ) ...

If else anidados
if ("forward".equals(cmd)) { if (slide >= numSlides) beep.play(); else slide++; } else { if (slide <= 1) beep.play(); else slide--; }

If else if
if (drinkSize.equals(Large")) { price += 1.39; } else if (drinkSize.equals("Medium")) { price += 1.19; } else // if "Small" drink size { price += 0.99; } if (drinkSize.equals(Large")) price += 1.39; else if (drinkSize.equals("Medium")) price += 1.19; else // if "Small" drink size price += 0.99;

Errores comunes
Punto y coma adicional Faltan { }

if (...) ; { sentencias; ... }


Es ms seguro usar { } en ifelse

if (...) sentencia1; sentencia2; ... if (...) if (...) sentencia1; else sentencia2;

switch
switch (expression) { case value1: ... break; case value2: ... break; ... ... default: ... break; switch (num) { case 1: case 2: System.out.println ("Buckle your shoe"); break; case 3: ... }

Tipos de datos enumerados


Usados cuando el atributo de un objeto o estado puede tomar solo un pequeo conjunto de valores
private enum Speed { LOW, MEDIUM, HIGH }; private enum InkColor { BLACK, RED }; private enum DayOfWeek { sunday, monday, tuesday, wednesday, thursday, friday, saturday };

Tipos de datos enumerados


Use == o != para comparar valores enum
private enum Speed { LOW, MEDIUM, HIGH }; ... Speed currentSpeed = Speed.LOW; ... if (currentSpeed == Speed.LOW) ...

Puede ser usado en una estructura switch


switch (currentSpeed) { case LOW: ... break; case MEDIUM: ...

while
condicion es cualquier expresin lgica

while ( condicion ) { statement1; statement2; ... statementN; } Si el cuerpo tiene solo una sentencia, entonces las { } son opcionales

cuerpo del lazo

while ( condicion ) statement1;

while
// Returns the smallest n // such that 2^n >= x public static int intLog2 (int x) { int n = 0, p = 1; while ( p < x ) { p *= 2; n++; } return n; }

Inicializacin Test Cambio

for
for es una forma abreviada que combina en una sentencia la inicializacin, la condicin y el cambio
for ( initialization; condition; change ) { statement1; statement2; ... statementN; }

do while
do { statement1; statement2; ... statementN; } while ( condition ); Siempre use { } para facilitar la lectura del cdigo Se ejecuta al menos una vez

Si la condicin es falsa, no se ejecuta la prxima iteracin

break y continue
El break en una sentencia de iteracin instruye al programa para que termine inmediatamente la iteracin y contine en la primera sentencia despus del lazo return en un lazo indica al programa para que inmediatamente termine la ejecucin del mtodo y retorne al punto donde fue invocado Un break o return debe estar dentro de una clusula if o else

break y continue

int r, c; for (r = 0; r < m.length; r++) { for (c = 0; c < m[0].length; c++) { if (m [ r ][ c ] == 'X' ) break; } } ... breaks colocados dentro de un lazo interno continuan con el lazo externo

Paradigma Orientado a Objetos

Paradigma Orientado a Objetos


Paradigma estructurado o procedural: Los programas se dividen en procedimientos independientes con acceso total a los datos comunes.

Algortimos + Estructuras de Datos = Programas


Paradigma orientado a objetos: Los datos se consideran la parte ms importante del programa. Los objetos modelan las caractersticas de los problemas del mundo real, su comportamiento ante estas caracteristicas y su forma de interactuar con otros elementos

objetos + mensajes = Programas

Ejemplo: Tomarse un caf en una panadera


Procedural El cliente entra en la panadera El cliente pasa detrs de la barra El cliente prepara la cafetera El cliente se sirve el caf El cliente se bebe el caf. Orientado a Objetos El cliente entra en la panadera El cliente pide un caf al cafetero El cafetero prepara el caf. El cafetero sirve el caf al cliente. El cliente se bebe el caf.

Paradigma Orientado a Objetos


Clases: Patrones que indican como construir objetos Objetos: Instancias de las clases en tiempo de ejecucin. Miembros de la clase: Atributos: Caractersticas o propiedades de los objetos (o clases). Pueden ser variables de tipo simple o referencias a otros objetos Mtodos: Comportamientos de los objetos. Son funciones que operan sobre los atributos de los objetos.

Clase
Sintxis
Class <NombreClase> { // Declaracion de atributos <tipo> <var>; // Declaracin de mtodos <tipo> <nombreMetodo> ( <argumentos> ) { } }

El nombre del archivo debe coincidir con el de la clase definida en l. Se recomienda definir una clase por cada archivo Java.

Estructura general

Attribute

Creacin de un objeto
Se usa la palabra reservada new <refObjeto> = new <NombreClase>();

Ejemplo: Circulo miCirculo; miCirculo = new Circulo();

Atributos
Atributos o Miembros Los miembros o atributos se declaran fuera de los constructores y mtodos Generalmente su declaracin se agrupa en el tope de la clase o despus de los mtodos El alcance de un atributo es toda la clase

Alcance de los atributos

Alcance

public class SomeClass { Atributos } Constructores y mtodos

O
public class SomeClass { Constructores y mtodos Atributos }

Alcance

Atributos
La definicin de los miembros o atributos de una clase se puede ampliar aadiendo modificadores al principio.:
[modificador]<tipo> <identificador>; [modificador]<tipo> <nombre>(<args>) {...}

Los modificadores permiten acceder a los datos o mtodos de manera restringida

Atributos
public. El miembro de la clase es accesible desde cualquier parte del cdigo. private. El miembro de la clase slo es accesible desde cdigo perteneciente a la propia clase. protected(o friendly). Slo las subclases de la clase y nadie ms pueden acceder a las variables y mtodos.

Ejemplo
public class Circulo { // Atributos double radio; String color; // Metodos void asigRadio( ){ } double area( ){} }

Atributos de una clase


De instancia. Cada instancia tiene un valor particular. Representan el estado particular de cada objeto. De clase. Todas las instancias comparten el mismo valor para estos atributos (como atributo global). Si se cambia en una instancia, se refleja en todas. Representan el estado compartido Se declaran utilizando el modificador static. class Ficha { public long id; public static long idactual = 0; public Ficha() { id = idactual++; } }

Acceso a los miembros


El operador . aplicado a referencias permite el acceso a atributos y mtodos.

public class EjemplosManipulacionObjetos { public static void main(String[] args) { Ficha f1 = new Ficha(); System.out.println(f1.id); f1.id = 34; Persona juan = new Persona("Juan","5555555"); Persona maria = new Persona("Mara","5555555"); Persona pedro = new Persona("Pedro","5555555", juan,maria); System.out.println(pedro.nombre()); System.out.println(pedro.padre().nombre()); System.out.println(pedro.madre().nombre()); } }

Mtodos
Constructores y mtodos pblicos de una clase constituyen la interface de la clase que puede ser usada por sus clientes Todos los campos son generalmente declarados de tipo privado, es decir estn ocultos Mtodos Ayudantes que son necesarios slo para la clase se declaran de forma privada

accessor modifier
Generalmente, el programador provee de mtodos accessors que permiten acceder campos privados y mtodos modifiers que permiten modificar el valor de los campos privados Generalmente, el nombre de los mtodos accessor comienzan con get y los modifiers con set

encapsulacin
public class MyClass { // Private fields: private <sometype> myField; ... // Constructors: public MyClass (...) { ... } ... // Public methods: public <sometype> myMethod (...) { ... } ... // Private methods: private <sometype> myMethod (...) { ... } ... }

Public interface: public constructors and methods

Constructores
Un constructor es un procedimiento para crear objetos de una clase El constructor generalmente inicializa los campos del objeto Los constructores no tienen valor de retorno Todos los constructores en una clase tienen el mismo nombre ( el de la clase) Los contructores pueden recibir parmetros

Constructores
Si una clase tiene ms de un constructor, entonces deben tener distintos nmeros o tipo de argumentos Generalmente se proveen constructores sin argumentos Si el programador no provee un constructor, Java provee uno por defecto que reserva memoria para el objeto e inicializa los campos con los valores por defecto

Constructores
public class Fraction { private int num, denom; public Fraction ( ) { num = 0; No-args denom = 1; constructor } public Fraction (int n) { num = n; denom = 1; Continua } public Fraction (int n, int d) { num = n; denom = d; reduce (); } public Fraction (Fraction other) { num = other.num; denom = other.denom; } ... Copy }

constructor

Constructores
Constructores de una clase pueden llamarse entre si usando la palabra reservada this
public class Fraction { ... public Fraction (int n) { this (n, 1); } ... ... public Fraction (int p, int q) { num = p; denom = q; reduce (); } ...

Referencias a objetos
Fraction f1 = new Fraction(3,7); Fraction f2 = f1; Objeto Fraction num = 3 denom = 7 Fraction f1 = new Fraction(3,7); Fraction f2 = new Fraction(3,7); objeto Fraction num = 3 denom = 7 objeto Fraction num = 3 denom = 7

f1 f2

f1

f2
Referencia al mismo objeto

Mtodos
public [or private] returnType methodName (type1 name1, ..., typeN nameN)
{

...
}

cuerpo

encabezado

Para definir un mtodo Decida entre public y private (usualmente public) Dele un nombre Especifique el tipo de argumentos y deles un nombre Especifique el valor del retorno del mtodo Escriba el cdigo del mtodo

Paso de argumentos
Cualquier expresin que tenga el tipo apropiado puede ser pasada como argumento
double u = 3, v = -4; ... Polynomial p = new Polynomial (1.0, -(u + v), u * v); double y = p.getValue (2 * v - u); public class Polynomial { public Polynomial (double a, double b, double c) { ... } public double getValue (double x) { ... } ...

Paso de argumentos
Un tipo menor puede ser promovido a un tipo mayor ( int a long, float a double) int es promovido a double cuando sea necesario
... Polynomial p = new Polynomial (1, -5, 6); double y = p.getValue (3);

Igual que (3.0)

Igual que (1.0, -5.0, 6.0)

Paso de argumentos
Los tipos primitivos son siempre pasados por valor, es decir el valor es copiado en el parmetro public class Polynomial
{ double x = 3.0; double y = p.getValue ( x ); copia ... public double getValue (double u) { double v; u actua como una ... variable local en } getValue

x:

3.0

copia

u:

3.0

Paso de argumentos
public class Test { public double square (double x) { x es una copia del parmetro x *= x; pasado. La copia cambia pero return x; } public static void main(String[ ] args) { Test calc = new Test (); ... el valor original de double x = 3.0; x no cambia double y = calc.square (x); Salida: 3 9 System.out.println (x + " " + y); } }

Paso de argumentos
Los objetos siempre se pasan por referencia: la referencia es copiada mas no el objeto
Fraction f1 = new Fraction (1, 2); Fraction f2 = new Fraction (5, 17); Fraction f3 = f1.add (f2); public Fraction add (Fraction f) { ... } Refiere al } mismo objeto public class Fraction { ... copia referencia

Refiere a

Un objeto Fraction: num = 5 denom = 17

Paso de argumentos
Dentro de un mtodo, this hace referencia al objeto por el cual el mtodo fue invocado this puede ser pasado a otros constructores y mtodos como parmetro
public class ChessGame { ... Player player1 = new Player (this); ... Una referencia a este (this) objeto ChessGame

sentencia return
Un mtodo, a menos que sea void, retorna un valor del tipo especificado por el mtodo Paso de argumentos La sentencia return es usada para terminar el mtodo y devolver un valor
return expresin; El tipo del valor o expresin retornada debe ser del mismo que lo declarado en el mtodo

sentencia return
Un mtodo puede tener varias sentencias return

public someType myMethod (...) { ... if (...) return <expression1>; else if (...) return <expression2>; ... return <expression3>; }

sentencia return
Un mtodo booleano puede retornar true, false, o el resultado de una expresin booleana
public boolean myMethod (...) { ... if (...) return true; ... return n % 2 == 0; }

sentencia return
Un mtodo void puede usar una sentencia de return para finalizar antes el mtodo
public void myMethod (...) { ... if (...) return; ... No hay necesidad } de especificar return al final del mtodo

sentencia return
Si la clase devuelve una clase, entonces el mtodo retornar una referencia a un objeto o null Generalmente el objeto ser creado dentro del mtodo usando new
public Fraction inverse () { if (num == 0) return null; return new Fraction (denom, num); }

El objeto retornado puede tambin venir de un parmetro o de otra llamada a otro mtodo

Sobrecarga de mtodos
Mtodos de la misma clase que tienen el mismo nombre y diferente nmero y/o tipo de argumentos se conocen como mtodos sobrecargados Use sobrecarga de mtodos cuando deben llevar a cabo tareas similares
public void move (int x, int y) { ... } public void move (double x, double y) { ... } public void move (Point p) { ... } public Fraction add (int n) { ... } public Fraction add (Fraction other) { ... }

Sobrecarga de mtodos
El compilador los trata como mtodos diferentes El compilador sabe cul mtodo ser invocado basado en el nmero de argumentos y el tipo de los mismos
Circle circle = new Circle(5); circle.move (50, 100); Point center = new Point(50, 100); circle.move (center); public class Circle { public void move (int x, int y) { ... } public void move (Point p) { ... } ...

Sobrecarga de mtodos
El tipo devuelto por el mtodo no es suficiente para distinguir mtodos sobrecargados
public class Circle { public void move (int x, int y) { ... } public Point move (int x, int y) { ... } ...

Error de sintxis

Campos static
Un campo static (class field o class variable) es un campo compartido por todos los objetos de la clase Un campo non-static ( instance field o instance variable) pertenece al objeto en particular

Campos static
Un campo static puede mantener una constante compartida por todos los objetos de la clase
public class RollingDie { private static final double slowDown = 0.97; private static final double speedFactor = 0.04; ... Palabras reservadas:

static final

Un campo static puede ser usado para recoger estadsticas o totales de los objetos de la clase

Campos static
El campo Static es almacenado dentro del cdigo de la clase, de manera separada de las variables de instancia que describen a un objeto en si Campos public static son usualmente constantes globales y son referenciadas con el operador . ClassName.constName double area = Math.PI * r * r; setBackground(Color.BLUE); c.add(btn, BorderLayout.NORTH); System.out.println(area);

Campos static
Generalmente no se inicializan los campos static en los constructores. Se hace en la declaracin o en mtodos public static Si una clase tiene solamente campos static, entonces no hay necesidad de crear objetos de dicha clase. Todos seran idnticos Math y System son ejemplos de lo anterior. No poseen constructores pblicos y no pueden ser instanciados

static mtodos
Mtodos static pueden acceder y manipular campos estticos de una clase No pueden acceder campos no estticos o llamar mtodos no estticos de la clase Los mtodos static son llamados usando la notacin punto ClassName.statMethod(...) double x = Math.random(); double y = Math.sqrt (x); System.exit();

static mtodos
public class MyClass { public static final int statConst; private static int statVar; private int instVar; ... public static int statMethod(...) { statVar = statConst; OK statMethod(...); instVar = ...; instMethod(...); }

Mtodo static

Error!

Mtodos no static
Un mtodo no static puede ser invocado por un objeto usando la notacin punto objName.instMethod(...);
vendor.addMoney(25); die1.roll();

Estos mtodos pueden acceder todos los campos y mtodos de la clase (static o no)

Herencia

Herencia
Superclase (clase base)
Subclass extends Superclass

Subclase (clase derivada)

La herencia representa una relacin de es un entre objetos Un objeto de la subclase es un objeto de la superclase

Jerarqua entre clases


Usando herencia, el programador puede definir jerarqua entre las clases
Biped Walker ToedInWalker Hopper Dancer

CharlieChaplin

Herencia
La herencia de clases se lleva a cabo mediante extends Establece una relacin de especializacin -generalizacin entre clases. La subclase puede introducir nuevos mtodos y redefinir mtodos de la superclase.

Jerarqua entre clases


Ayuda a reducir duplicacin de cdigo factorizando lo comn entre varias clases en la superclase
Walker Constructor firstStep nextStep stop distanceTraveled Biped Constructor Accessors turnLeft turnRight turnAround draw Hopper Constructor firstStep nextStep stop distanceTraveled

Jerarqua entre clases


Reduce la duplicacin de cdigo y permite escribir mtodos mas generales
public void moveAcross (Walker {

creature, int distance)

creature.firstStep(); while (creature.distanceTraveled() < distance) creature.nextStep(); public void moveAcross creature.stop(); } (Biped creature, int distance) { public void moveAcross creature.firstStep(); while (creature.distanceTraveled() < distance) (Hopper creature, int distance) creature.nextStep(); { creature.stop(); creature.firstStep(); while (creature.distanceTraveled() < distance) } creature.nextStep(); creature.stop(); }

Sirve tanto para Walker o Hopper por polimorfismo

Ejemplo de herencia
public class Articulo { // clase padre public float precio=0; ... public void setPrecio(float elPrecio) { precio = elPrecio; } ... public float getPrecio() { return precio; } } //los mtodos y atributos de Articulo son heredados a Pelicula public class Pelicula extends Articulo {// clase hijo public void setDescripcion(String descrip) { descripcion = descrip; } ... public String getDescripcion() { return descripcion; } }

Ejemplo de herencia
public class Persona { // Hereda de Object private String nombre; public Persona(String nombre) { this.nombre = nombre; } public String nombre() {return nombre;} } public class Empleado extends Persona { private double salario; public Empleado(String nombre,double salario) { super(nombre); // invoca al constructor de la superclase this.salario = salario; } public double salario() {return salario;} }

Herencia es un
Para saber si la relacin de herencia es correcta, se plantea la pregunta "la subclase es-una superclase?". La respuesta debe ser "s

el Jefe es-un Empleado? S la Secretaria es-un Empleado? S


class Bici { int numRuedas; int numAsientos; int velocidadMax; } class Avion { int int int int } class Bici { int numRuedas; int numAsientos; int velocidadMax; } class Avion extends Bici { int numAlas; } Avion es-una Bici? NO

numRuedas; numAsientos; velocidadMax; numAlas;

Relacin de contenido
Una clase puede contener referencias a objetos de otras clases Se diferencia de la herencia en que es necesario instanciarlos por separado Responde afirmativamente a la pregunta: <Contenedor> tiene-un <Contenido>?
class Motor { ... ... } class Chasis { } class Coche { Motor m; Chasis ch; }

un Coche tiene-un Motor? S un Coche tiene-un Chasis? S

Mtodos virtuales
Una subclase puede modificar los mtodos que ha heredado de las superclase, manteniendo los mismos nombres, tipos de retorno y listas de argumentos.
class Empleado { int calcularVacaciones() {...} } class Jefe extends Empleado { int numSupervisados, int calcularVacaciones() {...} }

Ejemplo
class Persona { // Atributos private String nombre; private String telefono; private Persona padre; private Persona madre; // Constructores public Persona(String nombre, String telefono) { this(nombre,telefono,null,null); } public Persona(String nombre, String telefono, Persona padre, Persona madre) { this.nombre = nombre; this.telefono = telefono; this.padre = padre; this.madre = madre; ....

......... // Metodos, acceden a atributos privados public String nombre() {return nombre;} public String telefono() {return telefono;} public Persona padre() {return padre;} public Persona madre() {return madre;} public boolean hayPadre() {return padre != null;} public boolean hayMadre() {return madre != null;} }

polimorfismo
Asegura que el mtodo correcto ser llamado para un objeto de un tipo especfico, an cuando el objeto es una referencia a un objeto de un tipo genrico, es decir de una superclase Una vez definido una superclase comn, el polimorfismo ya existe, no hay que hacer nada adicional

polimorfismo
El parmetro actual pasado a este mtodo puede ser Walker, Hopper, etc. cualquier subclase de Biped.
public void moveAcross (Biped creature, int distance) { creature.firstStep(); while (creature.distanceTraveled () < distance) creature.nextStep(); creature.stop(); }

El mtodo correcto ser llamado automticamente para cada tipo especfico de creature: mtodos Walker para Walker, mtodos Hopper para Hopper, etc.

Un mtodo con el mismo nombre, tipo de retorno y lista de parmetros puede ser aplicado a objetos de diferentes clases. Uso, trabajar con la clase ms general:
Parmetros polimrficos Colecciones heterogneas
Empleado e1 = new Empleado(); Empleado e2 = new Jefe(); Empleado e1 = new Secretaria(); e2.numSupervisados = 15; // ERROR ((Jefe)e2).numSupervisados = 15;

Parmetros polimrficos
class Mascota {...} class Raton extends Mascota {...} class Gato extends Mascota {...} class Veterinario { void vacunar ( Mascota m ) {...} } ... Veterinario doctor = new Veterinario(); Gato tom = new Gato(); Raton jerry = new Raton(); doctor.vacunar(tom); doctor.vacunar(jerry); ...

clases abstractas
Algunos mtodos en una clase pueden ser declarados como abstract y slo especificar la firma del mtodo Una clase con uno o ms mtodos abstractos debe ser declarada abstract
public abstract class Biped { ... public abstract void firstStep(); public abstract void nextStep(); public abstract void stop(); ... public void draw(Graphics g) { ... } }

Mtodos abstractos

clases abstractas
Clases abstractas sirven como superclases comunes para clases ms especficas Un mtodo abstracto provee una oportunidad al compilador para realizar chequeo adicional de errores Las clases y mtodos abstractos son necesarios para que el polimorfismo funcione Las clases abstractas estn ms cerca de la raz de la jerarqua pues describen objetos abstractos

clases abstractas
Java no nos permite instanciar, es decir crear objetos, de una clase abstracta An cuando la clase abstracta pueda tener constructores, estos pueden ser llamados desde constructores de las subclases Una clase sin mtodos abstractos se conoce concrete

Ejemplo
Jerarqua de figuras geomtricas: class Punto { int x; int y; int color; } abstract class Figura { Punto ptoOrigen; abstract void dibujar(); } class Rectangulo extends Figura { Punto ptoFinal; void dibujar() {...} } class Circulo extends Figura { int radio; void dibujar() {...} }

Class Object
En Java, cada clase por defecto extiende de Object(java.lang) Object es una clase concreta
public class Object { public String toString {...} public boolean equals (Object other) {... } public int hashCode() { ... } // a few other methods ... } Methods redefined (overridden) as necessary

Object
Todas las clases implcitamente heredan de la clase Object: raz de la jerarqua. Object define un conjunto de mtodos redefinibles: public boolean equals(Object o): Permite definir el criterio de igualdad de contenido de una determinada clase El operador == nicamente chequea la igualdad de referencias. En Object, equals se define directamente como la identidad de referencias.

Object
public class Ficha { private long id; private static long idactual = 0; public Ficha() { id = idactual++; } public long id() {return id;} public boolean equals(Object o) { return (o instanceof Ficha) && ((Ficha)o).id() == id; } public String toString() { return "Ficha(id="+id+")"; } }

Object
String s1 = new String("Hola") String s2 = new String("Hola"); if (s1 == s2) ... if (s1.equals(s2)) ... // false // true

s1.equals(s2) equivale a s2.equals(s1)

Llamando a los constructores de una superclase


Biped Walker public class Walker extends Biped { // Constructor public Walker(int x, int y, Image leftPic, Image rightPic) { Llama al constructor super(x, y, leftPic, rightPic); de Biped ... } El nmero y tipo de argumentos debe coincidir } con alguna de los constructores de la superclase
Si est presente, debe ser la primera sentencia

Llamando a los constructores de una superclase


Siempre se llama a uno de los constructores de la superclase, pero no es necesario hacerlo de forma explcita Si no hay una llamada explcita a super, entonces se invoca al constructor por defecto de la superclase sin argumentos

Llamando a los constructores de una superclase


El constructor de una superclase llama al constructor de su superclase hasta el constructor de Objetc
Object
super( )

Biped
super(...)

Walker

LLamando mtodos de la superclase


Walker
public class CharlieChaplin CharlieChaplin extends Walker { ... public void nextStep () { turnFeetIn(); Llama al mtodo super.nextStep(); nextStep de Walker turnFeetOut(); } ... super.someMethod se refiere a someMethod } en la clase ms cercana en la jerarqua de clases donde someMethod fue definido.

Interface

DanceFloor DanceGroup ControlPanel Band Dancer


Interface

Aerobics Waltz Rumba Cha-Cha-Cha Salsa

Dance

Interface
Una interface es un conjunto de declaraciones de mtodos Declaracin:
interface <NombreInterfaz> { <tipo> <nombreMtodo1> ( <args> ); <tipo> <nombreMtodo2> ( <args> ); ... }

Una clase que implemente el cdigo de la interfaz debe implementar todos sus mtodos
class <NombreClase> implements <NombreInterfaz> { <tipo> <nombreMtodo1> ( <args> ) { <cdigo> } <tipo> <nombreMtodo2> ( <args> ) { <cdigo> } ... }

Interface
Un interface en Java es similar a una clase abstracta que no tiene atributos ni constructores, y todos sus mtodos son abstractos
public interface Dance { DanceStep getStep (int i); int getTempo (); int getBeat (int i); }

Interface
Hay que indicar explcitamente que una clase implementa una interface Una clase concreta que implementa una interface debe suplir todos los mtodos de dicha interface
public class Waltz implements Dance { ... // Methods: public DanceStep getStep (int i) { ... } public int getTempo () { return 750; } public int getBeat (int i) { ... } ... }

Interace
Las interfaces sirven para:
Declarar Definir

mtodos que sern implementados por una o ms clases la interface de programacin de un objeto, sin mostrar el cuerpo actual de la clase

Cada interface debe escribirse en un archivo *.java con el mismo nombre de la interface

Interface - abstract
interface Interfaz { <tipo> <mtodo1>(); <tipo> <mtodo2>(); ... <tipo> <mtodoN>(); } equivale a abstract class Interfaz { abstract <tipo> <mtodo1>(); abstract <tipo> <mtodo2>(); ... abstract <tipo> <mtodoN>(); }

Interface
public interface Edible { String getFoodGroup(); int getCaloriesPerServing(); } public class Pancake implements Edible { ... }

public class Breakfast Polimorfismo: el { mtodo correcto private int myTotalCalories = 0; es llamado para ... cada tipo public void eat (Edible obj, int servings) especfico de Edible, es decir { Pancake, etc. myTotalCalories += obj.getCaloriesPerServing () * servings; } ... }

Array

array
Un array o arreglo es un bloque de localidades consecutivas de memoria que almacenan valores del mismo tipo de dato Cada localidad individual se le conoce como elemento del arreglo Cuando hablamos de un elemento, hacemos referencia al valor almacenado en dicho elemento
1.39 1.69 1.74 0.0

Un arreglo de doubles

array
En lugar de tratar cada elemento como una variable por separado, todo el arreglo obtiene un nombre Un elemento especfico del arreglo es referenciado usando el nombre del arreglo y el ndice del mismo
1.39 c[0] 1.69 c[1] 1.74 c[2] 0.0 c[3]

c es el nombre del arreglo

array
En Java, un ndice se escribe entre [ ] El ndice puede tomar cualquier valor entero entre 0 y la longitud 1 del arreglo Se puede usar como ndice una variable entera o cualquier expresin que de como resultado un valor entero
a [3] a [k] a [k - 2] a [ (int) (6 * Math.random()) ]

array
En Java, los arreglos se declaran de forma esttica, es decir, su tamao no puede cambiar a tiempo de ejecucin El interpretador de Java chequea los valores de los ndices y lanza una excepctn ArrayIndexOutOfBoundsException si el ndice es negativo o mayor que la longitud 1 del arreglo

array
El poder de los arreglos radica en el hecho de que los valores de los ndices pueden ser calculado a tiempo de ejecucin
Sin arrays: int sum = 0; sum += score0; sum += score1; sum += score999; Con arrays: int n = 1000; int sum = 0, k; for (k = 0; k < n; k++) sum += scores[k];

1000 veces!

array
Los arreglos nos permiten un acceso directo a cualquier elemento del mismo sin necesidad de recorrer toda la estructura de datos Sin arrays: if (k == 0) display (score0); else if (k == 1) display (score1); else // etc. Con arrays: display (scores[k]);

1000 veces!

array
En Java, un arreglo es un objeto. Si el tipo de sus elementos es anyType, entonces el tipo del objeto arreglo es anyType[ ]. Declaracin de arreglos anyType [ ] arrName;

Dado que es un objeto, la declaracin crea solamente una referncia inicialmente en null. Un arreglo debe ser creado antes de su uso arrName = new anyType [length] ;
[ ] en lugar de ( )

array
Cuando el arreglo es creado, se le asigna espacio de memoria para almacenar sus elementos. Si no se especifica los valores de los elementos, stos obtienen el valor por defecto

scores = new int [10] ; words = new String [10000];

Longitud 10, todos los valores en 0 longitud 10000, todos los valores en null

array
Un arreglo puede ser inicializado en la declaracin
int [ ] scores = new int [10] ; private double [ ] gasPrices = { 3.05, 3.17, 3.59 }; String [ ] words = new String [10000]; String [ ] cities = {"Atlanta", "Boston", "Cincinnati" };

array
O puede ser inicializado ms adelante durante la ejecucin
String [ ] words;
No inicializado

... words = new String [ console.readInt() ]; private double[ ] gasPrices; gasPrices = new double[ ] { 3.05, 3.17, 3.59 };
No inicializado

array
La longitud del arreglo es indicado en el momento de la creacin La longitud puede indicarse explcitamente en la declaracin o atravs de la lista de inicializacin La longitud de un arreglo arrName es obtenido en el cdigo usando arrName.length. length es un atributo pblico (no un mtodo) del objeto array

array
Como cualquier objeto, un arreglo es pasado a un mtodo como una referencia Los elementos del arreglo original no son copiados y pueden ser modificados desde el mtodo
// Swaps a [ i ] and a [ j ] public void swap (int [ ] a, int i, int j) { int temp = a [ i ]; a [ i ] = a [ j ]; a [ j ] = temp; }

array
public double[ ] solveQuadratic (double a, double b, double c) { double d = b * b - 4 * a * c; if (d < 0) return null; d = Math.sqrt(d); double[ ] roots = new double[2]; roots[0] = (-b - d) / (2*a); roots[1] = (-b + d) / (2*a); return roots; } O simplemente return new double[ ] { (-b - d) / (2*a), (-b + d) / (2*a) };

array
Arreglos de dos dimensiones son usados para representar matrices Un elemento en una matriz es direccionado usando un par de ndices (fila, columna)
board [ r ] [ c ] = 'x';

array
// 2-D array of char with 5 rows, 7 cols: char[ ] [ ] letterGrid = new char [5][7]; // 2-D array of Color with 1024 rows, 768 cols: Color[ ] [ ] image = new Color [1024][768]; // 2-D array of double with 2 rows and 3 cols: double [ ] [ ] sample = { { 0.0, 0.1, 0.2 }, { 1.0, 1.1, 1.2 } };
Si m es una matriz, entonces m[k] es un arreglo de una dimensin, la k-sima fila. m.length es el nmero de filas m[k].length es la longitud de la k-sima fila

array
Java permite matrices en donde las filas pueden tener longitudes diferentes En una matriz rectangular, m[0].length puede ser usado para representar el nmero de columnas.

Matriz irregular m.length

Matriz rectangular m.length

m[3].length

m[0].length

array
Un arreglo de 2-dimensiones puede ser recorrido usando lazos anidados
for (int r = 0; r < m.length; r++) { for (int c = 0; c < m[0].length; c++) { ... // process m[ r ][ c ] } }

array
Transpuesta de una matriz
int n = m.length; for (int r = 1; r < n; r++) { for (int c = 0; c < r; c++) { double temp = m [ r ][ c ]; m [ r ][ c ] = m [ c ][ r ]; m [ c ][ r ] = temp; } }

El nmero total de iteraciones a lo largo del lazo interno es : 1 + 2 + 3 + ... + n-1 = n (n - 1) / 2

Colecciones heterogneas
Hasta ahora un array slo poda contener elementos del mismo tipo (coleccin homognea) Utilizando polimorfismo se pueden tener elementos de distinto tipo en un array (coleccin heterognea) Se crean utilizando arrays definidos con el tipo superclase
Mascota[] listaMascotas = new Mascota[5]; listaMascotas[0] = new Mascota(); listaMascotas[1] = new Gato(); listaMascotas[2] = new Raton(); listaMascotas[3] = new Raton(); listaMascotas[4] = new Gato();

class Empleado { Se consigue tratar a todos los ... elementos por igual, aunque int salario; int calcularVacaciones(){...} alguno tenga un tratamiento } especial class Jefe extends Empleado { int numTrabajadores; int calcularVacaciones(){...} } ... Empleado[] lista = new Empleado[100]; lista[0] = new Empleado(); lista[1] = new Empleado(); ... lista[56] = new Jefe(); ... lista[99] = new Empleado(); for (int i = 0; i < lista.length; i++) { System.out.println(lista[i].calcularVacaciones()); }

Clase String

La clase String
Un objeto de la clase String representa una cadena de caracteres La clase String pertenece al paquete java.lang package que est dentro de Java Como cualquier clase, String tiene constructores y mtodos Al contrario de otras clases, String tiene dos operadores , + y += (usados para concatenar)

Literal Strings (contd)


Un texto string puede incluir caracteres de escape
\\ \n

se refiere a \ se refiere al caracter de nueva lnea


String s1 = "Biology; String s2 = "C:\\jdk1.4\\docs"; String s3 = "Hello\n";

Inmutabilidad
Una vez creado, un string no puede ser cambiado: ninguno de los mtodos permite hacer cambios A estos objetos se les conoce como inmutables Los objetos inmutables son convenientes porque varias referencias pueden apuntar al mismo objeto de forma segura: no existe peligro de cambiar el objeto a travs de una referencia sin que el resto se de cuenta del cambio

Inmutabilidad
Ventaja: mas eficiente, no necesita hacer copia
String s1 = "Sun"; String s2 = s1; String s1 = "Sun"; String s2 = new String(s1);

s1 "Sun" s2 OK

s1 s2

"Sun" "Sun"

Menos eficiente: ocupa ms memoria

Inmutabilidad
Desventaja: menos eficiente para pequeos cambios necesitas crear un nuevo string y botar el viejo
String s = "sun"; char ch = Character.toUpperCase(s.charAt (0)); s = ch + s.substring (1); s "sun" "Sun"

Strings vacos
Un string vaco corresponde a una cadena que no tiene caracteres. Su longitud es 0
String s1 = ""; String s2 = new String(); Strings vacos

No debe confundirse con string no inicializado

private String errorMsg;

errorMsg es null

Mtodos length, charAt


int length (); char charAt (k);
Devuelve el nmero de caracteres en el string Devuelve el k-simo char

Las posiciones en un string son numeradas desde 0 Retorna: Flower".length(); Wind".charAt (2); 6 n'

Mtodo substring
String s2 = s.substring (i, k); devuelve la subcadena de caracteres en las posiciones i hasta k-1 String s2 = s.substring (i);

strawberry i k

strawberry i

devuelve la subcadena desde el isimo caracter Retorna:

strawberry".substring (2,5); "unhappy".substring (2); "emptiness".substring (9);

"raw" "happy" "" (empty string)

Mtodo Concat
String result = s1 + s2; concatena s1 y s2 String result = s1.concat (s2); igual que s1 + s2 result += s3; concatena s3 a result result += num; convierte num a String y lo concatena a result

Mtodo Find (indexOf)


0 8 11 15
String date ="July 5, 2012 1:28:19 PM";

retorna
date.indexOf ('J'); date.indexOf ('2'); date.indexOf ("2012"); date.indexOf ('2', 9); 0 8 8 11 (empieza a buscar a partir de la posicin 9) no encontrado

date.indexOf ("2020"); date.lastIndexOf ('2');

-1 15

Mtodos Comparaciones
boolean b = s1.equals(s2); retorna true si el string s1 es igual a s2 boolean b = s1.equalsIgnoreCase(s2); retorna true si el string s1 matches s2, case-blind int diff = s1.compareTo(s2); retorna la diferencia s1 - s2 int diff = s1.compareToIgnoreCase(s2); retorna la diferencia s1 - s2, case-blind

public class Palindrome { public static boolean isPalindrome(String stringToTest) { String workingCopy = removeJunk(stringToTest); String reversedCopy = reverse(workingCopy); return reversedCopy.equalsIgnoreCase(workingCopy); } protected static String removeJunk(String string) { int i, len = string.length(); StringBuffer dest = new StringBuffer(len); char c; for (i = (len - 1); i >= 0; i--) { c = string.charAt(i); if (Character.isLetterOrDigit(c)) { dest.append(c); } } return dest.toString(); }

protected static String reverse(String string) { StringBuffer sb = new StringBuffer(string); return sb.reverse().toString(); } public static void main(String[] args) { String string = "Madam, I'm Adam."; System.out.println(); System.out.println( "Testing whether the following " + "string is a palindrome:"); System.out.println(" " + string); System.out.println(); if (isPalindrome(string)) { System.out.println(It IS a palindrome!"); } else { System.out.println("It is NOT a palindrome!"); } System.out.println(); }
}

De diagramas de clase (UML) a Java

Transformacin de clases para una implementacin OO


Todo atributo y operacin en el diagrama de clases se debe declarar formando parte de su clase correspondiente.
class LneaVenta {

Lnea Venta cantidad:entero subtotal( )


}

int cantidad; subtotal( ) {...} LneaVenta() {...}

Transformacin de asociaciones para una implementacin OO


Una asociacin bidireccional es implementada, normalmente, como un atributo de referencia dentro de cada objeto asociado. Si la asociacin es unidireccional slo se necesita aadir un atributo de referencia a una de las clases. Una asociacin tambin se puede implementar como una clase.

Transformacin de asociaciones para una implementacin OO


Los atributos de referencia de la clase uno son simplemente referencias a un objeto. Los atributos de referencia de la clase muchos necesitan un contenedor de objetos. Una asociacin cualificada se puede implementar en forma de objeto diccionario.

Transformacin de asociaciones para una implementacin OO


1..* Persona empleado
class Persona { Compaa empresario; Persona( ) { } } }

trabajapara empresario

1 Compaa

class Compaa { Persona[] empleado; Compaa( ) { }

Transformacin de asociaciones para una implementacin OO


1..* Libros Edita 1 Editorial

class Libro { Libro( ) { } }

class Editorial { Libro[] mislibros; Editorial( ) { } }

Transformacin de clase asociacin para una implementacin OO


0..* Usuario Autorizacin
class Usuario { autorizacin[] miautori; Usuario( ){ } } class autorizacin { usuario miusuario; estacint miestacin; autorizacin( ){ } } class estacint { autorizacin[] miautori; estacint( ){ } }

Esta autorizado en

0..*

Estacin de trabajo

Transformacin de atributos de enlace para una implementacin OO


Asociacin uno-a-uno: Los atributos de enlace se pueden almacenar como atributos de cualquiera de los objetos. Asociacin uno-a-muchos: Los atributos de enlace se pueden almacenar como atributos del objeto muchos. Asociacin muchos-a-muchos: Se implementa la asociacin como una clase.

Transformacin de agregacin para una implementacin OO


Se implementa igual que la asociacin. computadora 1..* monitor
class Monitor { Monitor( ) { } }

1 teclado
class Teclado { Teclado( ) {} }

class Computadora { Monitor[] mismonitores; Teclado miteclado; Computadora( ) { } }

Transformacin de herencia simple para una implementacin OO


Lmpara

Fluorescente
class Lmpara { Lmpara( ) { } } class Fluorescente extends Lmpara { Fluorescente( ) {} }

Incandescente

class Incandescente extends Lmpara { Incandescente( ) { } }

Paquetes

Paquetes
Un paquete es una agrupacin de clases (librera) El programador puede crear sus propios paquetes con la sentencia package al principio del archivo fuente package <nombre.paquete>; Ejemplo: package empresa.finanzas; La composicin de nombres (separados por puntos) est relacionada con la jerarqua de directorios: CLASSPATH\empresa\finanzas\ Los nombres de los paquetes se suelen escribir en minsculas

Ejemplo de Paquetes
Archivo fuente Empleado.java: package empresa.finanzas; public class Empleado { ... }

La clase Empleado realmente se llama empresa.finanzas.Empleado Si no se indica la sentencia package, la clase Empleado pertenecer a un paquete por defecto sin nombre

Sentencia import
La sentencia import indica al compilador dnde estn ubicadas las clases que estamos utilizando Para importar slo una clase de un paquete: import <nombre.paquete>.<NombreClase>; Para importar todas las clases de un paquete: import <nombre.paquete>.*; El compilador aade a todos los archivos la lnea import java.lang.*; El paquete que contiene las clases fundamentales para programar en Java (System, String, Object...)

Ejemplo de import
import empresa.finanzas.*; public class Jefe extends Empleado { String departamento; Empleado[] subordinados; } Si no se pone el import, deberamos referirnos a Empleado como empresa.finanzas.Empleado La clase Jefe pertenece al paquete annimo por defecto String pertenece al paquete java.lang

Modificadores de acceso: atributos y mtodos


Especificador private protected public package Clase Si Si Si Si Subclase Paquete Mundo No Si* Si No No Si Si Si No No Si No

La clase Vector

La Clase Vector
La clase Vector (paquete java.util) representa una coleccin heterognea de objetos (referencias a objetos de tipo Object o a cualquiera de sus subclases) El vector al crearse reserva cierta cantidad de memoria, aunque sus elementos slo utilicen una parte El tamao del vector se incrementa por bloques cuando se aade y se agota el espacio reservado. El tamao de incremento se indica en el atributo capacityIncrement El vector se mantiene compacto en todo momento Cada elemento es accesible a travs de un ndice, pero no con los corchetes, [ ]

La Clase Vector
Atributos: int capacityIncrement: incremento en la capacidad del vector. Si vale cero, duplica el tamao actual del vector. int elementCount: nmero de elementos vlidos del vector Object[] elementData: array de objetos donde se guardan los elementos Constructores: Vector(): Crea un vector vaco (capacidad 10, incremento 0) Vector(int initialCapacity): Crea un vector vaco con la capacidad dada (incremento 0) Vector(int initialCapacity, int initialIncrement): Crea un vector vaco con la capacidad y el incremento dados

La Clase Vector
Mtodos: int capacity() int size() boolean contains(Object elem) int indexOf(Object elem) Object get(int index) void set(Object elem,int index) devuelve la capacidad que tiene el vector devuelve el nmero de elementos en el vector devuelve true si el vector contiene el objeto especificado devuelve la posicin de la primera vez que aparece el objeto que se le pasa devuelve el elemento situado en la posicin indicada (*) reemplaza el objeto que corresponde al ndice por el objeto que se le pasa (*)

Los mtodos con (*) pueden lanzar la excepcin ArrayIndexOutOfBoundsException

La Clase Vector
Mtodos: void removeElementAt(int index) void addElement(Object elem) void insertElementAt(Object elem, int index) borra el objeto situado en la posicin indicada (*) aade un objeto al final inserta el objeto que se le pasa en la posicin indicada, desplazando el resto de elementos en el vector (*)

También podría gustarte