Anda di halaman 1dari 46

Introduccin a Java

Mario Gmez Martnez Departamento de Sistemas Informticos y Computacin Universidad Politcnica de Valencia

ndice
1. Introduccin
Java y la POO Atributos vs variables locales Tipos primitivos vs referencias Paso de parmetros Operaciones Atributos Mtodos Paquetes Modificadores de acceso

2. Variables, tipos y operaciones

3. Clases y paquetes

Estructuras de Datos y Algoritmos

INTRODUCCION

El lenguaje Java
Fuertemente Orientado a Objetos: todos los datos (salvo los tipos primitivos) son objetos Tipos estrictos: todas las variables estn tipadas, control estricto de tipos y conversin de tipos Clases estrictas: todos los objetos son instancias (miembros) de alguna clase

La jerarqua de clases de Java


java.lang.Object
java.lang.Boolean (implements java.lang.Comparable<T>, java.io.Serializable) java.lang.Character (implements java.lang.Comparable<T>, java.io.Serializable) java.lang.Character.Subset
java.lang.Character.UnicodeBlock

java.lang.Class<T> (implements java.lang.reflect.AnnotatedElement, java.lang.reflect.GenericDeclaration, java.io.Serializable, java.lang.reflect.Type) java.lang.ClassLoader java.lang.Compiler java.lang.Enum<E> (implements java.lang.Comparable<T>, java.io.Serializable) java.lang.Math java.lang.Number (implements java.io.Serializable)
java.lang.Byte (implements java.lang.Comparable<T>) java.lang.Double (implements java.lang.Comparable<T>) java.lang.Float (implements java.lang.Comparable<T>) java.lang.Integer (implements java.lang.Comparable<T>) java.lang.Long (implements java.lang.Comparable<T>) java.lang.Short (implements java.lang.Comparable<T>)

Estructuras de Datos y Algoritmos

Principios de POO
Abstraccin Encapsulacin y Ocultacin de informacin Herencia Polimorfismo

Estructuras de Datos y Algoritmos

Objetos
Un objeto representa un tem individual e identificable de una cierta clase Un objeto tiene:
Identidad: identificador nico [hashcode] Estado (Atributos): conjunto de propiedades de cierto tipo y valores que esas propiedades toman Comportamiento (Mtodos): operaciones que es posible realizar sobre el objeto

El estado y el comportamiento de un objeto se define e implementa en la clase a la cual pertenece Los trminos objeto y ejemplo (o instancia) de una clase son intercambiables.
Estructuras de Datos y Algoritmos 7

Objetos
En general los atributos de un objeto no cambian, cambian sus valores
Hay excepciones, mediante programacin reflexiva

Que los objetos tengan estado implica que ocupan un espacio de memoria. El estado de un objeto est influido por su historia; representa el efecto acumulado de su comportamiento. Los objetos son mutables: pueden ser creados, modificados y destruidos.
Estructuras de Datos y Algoritmos 8

Clases
Una clase es un conjunto de objetos que comparten una estructura y comportamiento comunes. Conceptualmente es una abstraccin que representa lo que tienen en comn un conjunto de objetos. Cualquier objeto es un ejemplo o instancia particular de una clase. Dos visiones
visin externa de comportamiento (especificacin o interfaz), que enfatiza la abstraccin escondiendo su estructura y comportamiento. visin interna (implementacin), que especifica la estructura y la implementacin del comportamiento especificado.

Estructuras de Datos y Algoritmos

Programa: conjunto de clases interrelacionadas

Estructuras de Datos y Algoritmos

10

VARIABLES, TIPOS Y OPERADORES

Variables
Segn contexto, se distingue entre
Atributos (field variables): estado de un objeto Variables locales (local variables) : temporales, usadas por un mtodo mientras est en ejecucin

<modificadores>? <Tipo> <declaracionVariable>; < modificadores> ::= public | protected | private | static | final | transient | volatile

Inicializacin
Atributos se inicializan automticamente a valores por defecto Variables locales no se inicializan automticamente
Estructuras de Datos y Algoritmos 12

Variables y Tipos
En Java todos los datos (variables) son de algn tipo determinado, que puede ser:
Tipos primitivos (byte, short, int, long, float, double, char y boolean) Vectores/Matrices ([]): coleccin de elementos de tamao predeterminado. No confundir con Objetos: instancias de una Clase dada la clase Vector

Estructuras de Datos y Algoritmos

13

Variables
public class Variables { // atributos static private int numero; private char caracter; protected String cadena1, cadena2 = "Una cadena"; String[] vector1; String[] vector2 = new String[10]; final char otroCaracter = caracter = 'a'; void miMetodo(int numP, String cadenaP) //parametros { // variables locales int numeroLocal = 10; int[] vectorLocal = new int[5]; //... }

}
Estructuras de Datos y Algoritmos 14

Tipos primitivos
Los tipos primitivos de Java son similares a los de los dems lenguajes de programacin:
boolean: true o false char: caracteres unicode de 16 bits byte: enteros de 8 bits con signo short: enteros de 16 bits con signo int: enteros de 32 bits con signo long: enteros de 64 bits con signo. float: reales de 32 bits double: reales de 64 bits

En los tipos primitivos se almacena directamente el valor

Referencias
Los datos de tipo primitivo almacenan valores directamente. Los dems tipos de datos (vectores y objetos) utilizan referencias Una referencia es la direccin de un rea en memoria, la cual se reserva con el operador new
Memoria

String s1 = Hola; String s2 = s1;

s1

102

102

H o l a

s2

102

Tipos primitivos vs. referencias


Ejemplo con tipos primitivos:
int a = 1; int b; b = a; Ejemplo con referencias: a b b 1 0 1

int a[] = new int[2]; a[0] = 1; a[1] = 2; int b[]; b = a;

0 1 1 1

0 0 2 2

a
a

a
b

Tipos primitivos vs referencias


Indica el contenido de los vectores a y b tras ejecutar las siguientes instrucciones:
int a[]; int b[] = new int[3]; a = new int[3]; a[0] = 1; b[1] = a[0]; a = b; b[0] = a[1];

Inicializacin automtica
Tipo boolean byte Valor por defecto false 0

Tips
Variables locales deben ser explcitamente inicializadas Vectores inicializados automticamente al ser creados, no al ser declarados, incluso si son variables locales

char short int long


float double Object Vector

'\u0000' 0 0 0l
0.0f 0.0d null Segn tipo

Traps
Los datos de tipo String se inicializan a la cadena vaca en vez de null Variables locales slo pueden llevar el modificador final
Estructuras de Datos y Algoritmos 19

Paso de parmetros
No confundir el mecanismo por referencia que se utiliza para manipular objetos en memoria, con el mecanismo utilizado para pasar los parmetros al llamar a un mtodo El paso de parmetros se hace siempre por valor, no por referencia. El mtodo recibe una copia del valor original, y por lo tanto no puede modificar el dato original.
Pero que pasa si el dato que pasamos es un objeto o vector? Lo que se copia es la referencia, si se modifica localmente el objeto pasado como parmetro, se modifica el objeto en su contexto original

Estructuras de Datos y Algoritmos

20

Actividad: Ejecuta y analiza


public class PruebaPasoParametros { private String atributo = new String(); public PruebaPasoParametros(String param) { atributo = param;} public static void cambiarObjeto(PruebaPasoParametros objeto) { objeto = new PruebaPasoParametros("Nuevo objeto"); }

public static void cambiarAtributo(PruebaPasoParametros objeto) { objeto.atributo = "Nuevo valor de atributo";}


public static void main(String[] args) { PruebaPasoParametros pas = new PruebaPasoParametros("Objeto inicial"); System.out.println("Objeto inicial " + pas); PruebaPasoParametros.cambiarObjeto(pas); System.out.println("Tras cambiar objeto " + pas); PruebaPasoParametros.cambiarAtributo(pas); System.out.println("Tras cambiar atributos del objeto " + pas);} public String toString() { return "[atributo = " + atributo + "]";} }
Estructuras de Datos y Algoritmos 21

Clases envoltorio
Permiten manipular datos de tipo primitivo como si fueran objetos Mtodos para convertir de uno a otro tipo Utilidades adicionales, por ejemplo leer datos representados como texto
Envoltorio
Byte Short Integer Long

Tipo primitivo
byte short int long

Float
Double

float
double

Boolean
Character

boolean
char

Integer a = new Integer(100); String b = "100"; Integer c = Integer.getInteger(b); int d = c.intValue();

Operadores
Igualdad y desigualdad: == , != Comparacin: <, <=, >, >= Suma y resta unarios: +, Suma, multiplicacin, divisin y mdulo: +, -, *, /, % Incremento y decremento prefijos y posfijos: ++, -Desplazamiento con signo y sin signo: <<, >>, >>> Negacin lgica unaria de bits: ~ Lgica de bits: &, |, ^ Lgica booleana: &&, ||

Operadores
Grupos de Precedencia
Grupo 0: ( ) Grupo 1: ++, --, + (unario), - (unario) Grupo 2: *, /, % Grupo 3: +, -, + (concatenacin)

Funciones matemticas:
Java.lang.Math

Operadores
Indica el resultado de este cdigo al ejecutarse
public class Operadores { public static void main(String[] args) { int a = 10; double b = 1.6; int c = a * (int) b;) int d = a + 3 * 2; d += 10; d++; int e = d + --a; System.out.println(c); System.out.println(d); System.out.println(e); System.out.println(a); }}
Estructuras de Datos y Algoritmos 25

CLASES Y PAQUETES

Clase
<modificadoresClase>? class <NombreClase> <extendsClause>? <implementsClause>? { <CuerpoClase>? } <modificadoresClase> ::= public | protected | private | abstract | static | final

En el cuerpo de una clase puede haber


Atributos Mtodos Constructores Inicializadores estticos
Estructuras de Datos y Algoritmos 27

Atributos
Variables que caracterizan el estado de los objetos de una clase. Se definen en el cuerpo de la clase. Un atributo no primitivo modela una relacin de agregacin o composicin con las clase correspondiente al tipo del atributo.
La clase Circulo tiene un (objeto de tipo) Color
public class Circulo { /** Atributos */ private double radio; private Color color;

El color se representa mediante objetos de la Clase Color

Constantes y atributos estticos


static final <Tipo> <declaracionVariable>; final: indica que el valor de un atributo no puede ser modificado static: indica que el valor del atributo es el mismo para todos los objetos de la misma clase (atributos de clase)
public class Circulo { /** Atributos */ private double radio; private Color color; private static final double RADIO_POR_DEFECTO = 3.0; private static final Color COLOR_POR_DEFECTO = Color.black;

Mtodos
Constructores: crean una instancia de la Clase inicializan los atributos del objeto
Se invocan con new Constructor()

Consultores: consultan informacin sin modificar el objeto (getters) Modificadores: modifican el estado del objeto (setters) Heredados de alguna superclase. Normalmente es necesario sobrescribirlos para usarlos correctamente: toString(), equals(Object x), clone()

Mtodos
Se declaran mediante un nombre, un tipo de retorno, y una lista de parmetros con su correspondiente tipo. Opcionalmente pueden ir acompaados de modificadores
<modificadores>? <Tipo> nombreMetodo (<parameterList>?) throwsClause { <CuerpoMetodo>? } < modificadores > ::= public | protected | private | static | abstract | final | synchronized | native El cuerpo incluye sentencias y una clusula return que devuelve un dato del tipo declarado.
Si el tipo es void entonces el mtodo no devuelve nada, no incluye clusula return

Estructuras de Datos y Algoritmos

31

Mtodos constructores
Tiene el mismo nombre que la clase y no devuelve nada No declara el tipo ni incluye clusula return
<modificadoresConstructor>? NombreClase (parameterList) { <CuerpoMetodo> } <constructor modifier> ::= public | protected | private

Constructor por defecto: public, sin parmetros, est implcito aunque no se defina, y llama al constructor sin parmetros de la superclase
public Circulo(){ super(); }

super() referencia al constructor de la superclase, que por defecto es Object()

Mtodos constructores
this referencia al objeto public Circulo(double radio, String color) { this.radio = radio; sobre el que se invoca el this.color = color; mtodo. Evita el aliasing } de nombres public Circulo() { this(RADIO_POR_DEFECTO, COLOR_POR_DEFECTO); }

this() referencia a un constructor

Primera lnea de un constructor es una llamada a otro constructor , mediante this() o super(). Sino, el compilador inserta automticamente la invocacin al constructor sin parmetros de la superclase :super().

Consultores y modificadores
public double getRadio() { return radio; }

public void setRadio(double nuevoRadio) { radio = nuevoRadio; }

Implementa los mtodos area() y perimetro(), haciendo uso del siguiente atributo de la clase Math:
public static final double PI;

Paquetes
Mecanismo bsico para organizar un grupo de clases que guardan alguna relacin entre si package <nombrePaquete> ; Paquetes Java estndar :
java.lang: contiene las clases bsicas (Integer, Math, String, etc.). No es necesario importarlo. java.util: contiene diversas utilidades (Random, Date, StringTokenizer, Scanner, etc.) java.io: clases para manipular ficheros y canales de E/S java.awt: contiene clases para disear interfaces grficas de usuario (Color, Graphics, etc.)

Paquetes en Java: utilizacin


Una clase C en un paquete p se especifica como p.C
public class miClase{ java.util.Date fecha = new java.util.Date();}

Para simplificar se usa

import <nombrePaquete>.*

import java.util.*; public class Import { Date fecha = new Date();}

O alternativamente, se importan slo las clases necesarias


import java.util.Date; public class Import { Date fecha = new Date();}

Paquetes en Java: reglas


Sea la clase p.C
Las clases en Java se implementan en un fichero con el mismo nombre que la clase y extensin .java: C.java La primer lnea del fichero C.java es la declaracin del paquete al cual pertenece, mediante la orden:
package p;

El fichero C.java debe estar en el subdirectorio p dentro del directorio que contiene las fuentes El subdirectorio p debe estar en la variable de entorno CLASSPATH Normalmente los entornos de
desarrollo ( Eclipse, Netbeans , BlueJ ) ya gestionan el CLASSPATH

Modificadores de acceso
Modificadores de visibilidad:
friendly: implcito (cuando no se especifica ningn modificador), es visible dentro del paquete en el que se define private: visible slo desde la propia clase protected: visible en las clases derivadas (subclases) y dentro del paquete en el que se define public: visible desde cualquier sitio

Otros modificadores
final: indica que no puede ser modificado static: comn a todos los objetos de una misma clase
No aplicable a clases

Modificadores de visibilidad
Modificador private friendly Misma clase Mismo paquete Subclases Otros

protected
public

Ocultacin de la informacin
Propiedad de ocultar atributos o mtodos a otros objetos. Algunos autores usan el trmino encapsulacin Se basa en la separacin entre especificacin e implementacin. En Java se consigue mediante el uso de modificadores de visibilidad No es necesario conocer la implementacin de una clase para usar objetos de esa clase, por eso en general se recomienda disear clases con Atributos privados Mtodos pblicos para acceder o modificar los atributos

Mtodos estticos
Mtodos estticos impiden acceso a atributos no estticos .
public static Color getColorPorDefecto() { return COLOR_POR_DEFECTO; } public static double area(double radio) { return Math.PI * radio * radio; }

Versin no esttica:
public double area() { return Math.PI * this.radio * this.radio; }

Mtodos estticos
Los mtodos estticos pueden invocarse directamente sobre la clase, pues no acceden a atributos no estticos.
double area = Circulo.area(10.0);

La versin no esttica requiere crear primero un objeto:


Circulo c = new Circulo(10.0, Color.red); double area = c.area();

Ejercicios propuestos
Escribe la clase Estadsticas, capaz de calcular la media y la desviacin tpica de un vector de nmeros. Escribe clase ConversorFsico para convertir magnitudes fsicas, por ejemplo de kilmetros a millas y viceversa Escribe clase ConversorMonedas para convertir monedas, por ejemplo de euros a dlares y viceversa
Estructuras de Datos y Algoritmos 43

Ejercicio Propuesto
Implementar una clase que permita gestionar un conjunto de crculos (como mximo 10 crculos)
Los crculos se guardarn en un vector de 10 elementos El constructor debe crear un vector vaco Consultores: leer el nmero de crculos insertados y poder recuperar un crculo del vector dado su ndice Modificadores: insertar un crculo en el vector (si hay menos de 10) Mtodos toString() y equals()

Algunas convenciones
Identificadores de paquete: lowercase.for.all.components Id. de clase e interfaz: CaptializedWithInternalWordsCapitalized Id. de mtodo: firstWordLowercaseButInternalWordsCapitalized() Id. de variable: firstWordLowercaseButInternalWordsCapitalized Id. de constante: UPPER_CASE_WITH_UNDERSCORES Los identificadores no pueden empezar con un nmero o signo #

Clases ejecutables
package ejemplos.tema1;
public class HolaMundo { static final String msg = "Hola mundo"; /* Ejecucin requiere implementar mtodo public static main con un parmetro de tipo String[] */

public static void main(String[] args) { System.out.println(msg); }


}

Es necesario instanciar la clase para ejecutar main ?


Estructuras de Datos y Algoritmos 46

Anda mungkin juga menyukai