Download java - La tribuna de Ensenada

Document related concepts
no text concepts found
Transcript
Una introducción a Java
Capitulo 0.
Dra. Maria Lucia Barrón Estrada
[email protected]
Aesoria: 13:00-14:00
Oficina de posgrado
Agosto-Diciembre 2007
Contenido



Instalación de Java
Fundamentos del lenguaje Java
Conceptos de POO con Java
Instalación de Java




Descargar el Java SE http://java.sun.com
http://java.sun.com/javase/downloads/index.jsp
Instalar el JDK 6 siguiendo las instrucciones
Verificar que se hayan creado todos los
directorios.
Verificar la instalación con un programa de
prueba
Directorio de archivos instalados
Editar, Compilar y Ejecutar
un programa



Crear el archivo fuente. Almacenarlo en el
directorio bin con el mismo nombre de la clase y
extensión java.
Compilar el programa usando:
> javac Nombre.java
 Si el programa no tiene errores se creara un
archivo de bytecodes llamado Nombre.class, si
tiene errores se debe editar el programa y
corregirlos.
Ejecutar el programa con el interprete de java:
> java Nombre
Editar el programa
Compilar y ejecutar
Fundamentos del Lenguaje
1.
2.
3.
4.
5.
6.
7.
8.
9.
Palabras reservadas y comentarios
Estructura de un programa
Tipos de datos
Variables.
Operadores.
Expresiones.
Instrucciones.
Bloques.
Control de flujo
Comentarios



Los comentarios permiten a los programadores
comunicar sus pensamientos independientemente del
codigo escrito.
Los comentarios NO generan codigo ejecutable, el
compilador los ignora.
En Java existen dos tipos de comentarios
 De fin de linea - inician con //
 Entre lineas - estan delimitados por /*
*/
Palabras Reservadas
Son palabras que tienen un significado especial en el
lenguaje y no pueden ser usadas como identificadoes.
abstract
default
goto
operator
synchronized
boolean
do
if
outer
this
break
double
implements
package
throw
byte
else
import
private
throws
byvalue
extends
inner
protected
transient
case
false
instanceof
public
true
cast
final
int
rest
try
catch
finally
interface
return
var
char
float
long
short
void
class
for
native
static
volatile
const
future
new
super
while
continue
generic
null
switch
Estructura de un programa

Los programas Java tienen una estructura basica
simple que se basa en la definicion de una clase.
Encabezado de la clase
Metodo principal
// Definicion de la clase HolaMundo.java
public class HolaMundo {
public static void main (String[] args) {
System.out.println(“Hola Mundo!");
}
}
Cuerpo de la clase
comentario
Tipos de Datos
En el lenguaje de programación Java, existen dos
categorías de datos:
 Primitivos
 Referenciales
Una variable de tipo primitivo contiene un valor simple del tamaño y
formato apropiado para su tipo: un número, un carácter, o un valor booleano
(condicional verdadero ó falso).
Una variable de tipo referencial contiene una referencia a un objeto del
tipo especificado o cualquier otro derivado de el.
Tipos de Datos Primitivos
La siguiente tabla lista, por palabras reservadas, todos los tipos de
datos primitivos soportados por Java, sus tamaños y formatos, y una
breve descripción de cada uno:
Palabra Reservada
Descripción
Tamaño
byte
Entero c/longitud byte
8-bit
short
Entero corto
16-bit
int
Integer
32-bit
long
Entero largo
64-bit
float
Punto flotante simple p. 32-bit
double
Punto flotante doble p.
64-bit
char
Un carácter simple
16-bit
boolean
Un carácter booleano
true o false
Datos Tipo Referencia
Arreglos, clases e interfaces son datos tipo referencia. El valor de un
dato tipo referencia, en contraste con uno de tipo primitivo, es que
es una referencia a (una dirección de) el valor, o conjunto de valores
representados por la variable.
Una referencia es denominada apuntador ó dirección de memoria
en otros lenguajes. Java no soporta el uso explicito de direcciones
como otros lenguajes. Se emplea el nombre de variable en su lugar.
Datos Tipo Referencia
public class MiFecha{
private int dia=1;
private int mes = 1;
private int año=2000
public String toString(){
return dia+”-”+mes+”-”+año;
}
}
// Podemos usar la clase MiFecha como sigue:
public class PruebaMiFecha {
public static void main(String[] args) {
MiFecha hoy = new MiFecha();
}
}
La variable hoy es una referencia a un objeto de tipo MiFecha.
Variables





El nombre de variable debe ser un identificador válido, -- un número
ilimitado de caracteres Unicode que comienza con una letra.
No debe ser una palabra reservada, un literal booleano (true or
false), ó la palabra reservada null.
Debe ser única dentro de su ámbito. Un nombre de variable puede
ser repetida si su declaración aparece en un ámbito diferente.
El tipo de variable determina que valores puede contener y que
operaciones se pueden realizar en ella.
Una variable debe ser declarada para poder ser utilizada
Ejemplos.
int x;
// define una variable de tipo entero llamada x
String nombre; // define una variable de tipo string llamada nombre
Object c;
Bicicleta miBici;
Programa de Ejemplo
Declaración de Variables
public class MaxVariablesDemo {
public static void main(String args[]) {
// integers
byte largestByte = Byte.MAX_VALUE;
short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
// real numbers
float largestFloat = Float.MAX_VALUE;
double largestDouble = Double.MAX_VALUE;
// other primitive types
char aChar = 'S';
boolean aBoolean = true;
}
}
Ámbito de las Variables
El ámbito de una variable es la región de un programa
dentro del cual la variable puede ser referenciada con
su nombre simple.
Ámbito es diferente de visibilidad, el cual aplica sólo a
variables miembro y determina si la variable puede ser
usada desde fuera de la clase dentro de la cual es
declarada.
La visibilidad se establece con un modificador de
acceso.
Ámbito de las Variables 2
La localización de la declaración de la variable dentro del
programa establece su ámbito y la coloca dentro de una de
estas cuatro categorías:
Variable miembro (pertenece a
una clase).
 Variable local
 Parámetro de método.
 Parámetro de manejador
de excepciones.

Inicialización de Variables
Las variables locales y variables miembro pueden ser inicializadas
con una instrucción de asignación en el momento que son
declaradas. El tipo de dato debe ser acorde al valor asignado.
Ej.
byte largestByte = Byte.MAX_VALUE;
short largestShort = Short.MAX_VALUE;
int largestInteger = Integer.MAX_VALUE;
long largestLong = Long.MAX_VALUE;
Los parámetros de métodos y los parámetros de manejadores de
excepciones no pueden ser inicializados de esta forma. El valor para
un parámetro es fijado por el llamador.
Constantes (final)
Se puede declarar una variable en cualquier ámbito para que sea
final.
El valor de una variable final no puede cambiar después de que ha
sido inicializada. Tales variables son similares a las constantes en
otros lenguajes.
Para declarar una variable final, emplee la palabra reservada final
antes del tipo:
Ej.
final int aFinalVar = 0;
En el caso del ejemplo, se ha declarado e inicializado la variable en
un solo paso. Se puede hacer en dos pasos si se prefiere. Hecho
esto, si se intenta asignar posteriormente un valor a ésta variable,
produciría un error de compilación.
Resumen - Variables

Existen dos categorías: primitivas y de referencia.
La ubicación de una declaración de variable indica implícitamente el
ámbito de la variable. Hay cuatro categorías de ámbito: miembro de
variable, variable local, parámetro y parámetro de manejador de
excepciones.

Se puede proveer un valor inicial para una variable dentro de su
declaración empleando el operador de asignación (=).

Se puede declarar una variable como final. El valor de una variable
final no puede ser cambiado después de que ha sido inicializada.

Class Byte





java.lang
Class Byte
java.lang.Object
java.lang.Number
java.lang.Byte
All Implemented Interfaces: Serializable,
Comparable<Byte>
public final class Byte extends Numberimplements
Comparable<Byte>
 The Byte class wraps a value of primitive type byte in an
object. An object of type Byte contains a single field whose
type is byte.
In addition, this class provides several methods for converting a
byte to a String and a String to a byte, as well as other
constants and methods useful when dealing with a byte.
Since: JDK1.1
See Also: Number, Serialized Form
Campos de la clase
static byte
MAX_VALUE
A constant holding the maximum value a byte can
have, 27-1.
static byte
MIN_VALUE
A constant holding the minimum value a byte can
have, -27.
static int
SIZE
static Class<Byte>
TYPE
The number of bits used to represent a byte value in
two's complement binary form.
byte.
The Class instance representing the primitive type
Constructores
Byte(byte value)
Constructs a newly allocated Byte object that represents the
specified byte value.
Byte(String s)
Constructs a newly allocated Byte object that represents the
byte value indicated by the String parameter.
Métodos de la clase
byte byteValue()
Returns the value of this Byte as a byte.
int compareTo(Byte anotherByte)
Compares two Byte objects numerically
static Bytedecode(String nm)
Decodes a String into a Byte.
Double doubleValue()
Returns the value of this Byte as a double.
Boolean equals(Object obj)
Compares this object to the specified object.
float floatValue()
Returns the value of this Byte as a float.
int hashCode()
Returns a hash code for this Byte.
int intValue()
Returns the value of this Byte as an int.
long longValue()
Returns the value of this Byte as a long.
static byte parseByte(String s)
Parses the string argument as a signed decimal byte.
static byte parseByte(String s, int radix)
Parses the string argument as a signed byte in the radix specified by the second argument.
short shortValue()
Returns the value of this Byte as a short.
String toString()
Returns a String object representing this Byte's value.
static String toString(byte b)
Returns a new String object representing the specified byte.
static Byte valueOf(byte b)
Returns a Byte instance representing the specified byte value.
static Byte valueOf(String s)
Returns a Byte object holding the value given by the specified String.
static Byte valueOf(String s, int radix)
Returns a Byte object holding the value extracted from the specified String when parsed with the radix given by the second
argument.
Usando la clase Byte
Operadores
Un operador realiza una función en uno, dos o tres operandos. Un
operador que requiere un operando es denominado operador unario.
Ej. ++ es un operador unitario que incrementa en uno el valor de su
operando.
Un operador que requiere dos operandos es un operador binario.
Ej. = es un operador binario. Se usa para asignación de valores a
variables.
Un operador que requiere tres operadores se denomina ternario.
Existe un operador ternario ?: que es una abreviación de la instrucción
if-else.
Existen también tres modalidades de notación: prefija, postfija e infija.
Operadores Aritméticos
Java soporta varios operadores aritméticos para todos los números
enteros y de punto flotante:
+ (suma), - (resta), * (multiplicación), / (división) y % módulo.
Ej.
ArithmeticDemo.java
Operador
Uso
Descripción
+
op1 + op2
Suma op1 y op2
-
op1 - op2
Resta op2 de op1
*
op1 * op2
Multiplica op1 por op2
/
op1 / op2
Divide op1 entre op2
%
op1 % op2
Calcula el remanente.
Operadores Aritméticos 2
Los operadores abreviados de incremento/decremento son
sumarizados en la siguiente tabla:
Operador
Uso
Descripción
++
op++
Incrementa op en 1. Asigna primero, incrementa después.
++
++op
Incrementa op en 1. Incrementa primero, asigna después.
--
op--
Decrementa op en 1. Asigna primero, decrementa después.
--
--op
Decrementa op en 1. Decrementa primero, asigna después.
Operadores Relacionales
Un operador relacional compara dos valores y determina la relación
entre ellos. Por ejemplo, != retorna verdadero si los dos operandos
son diferentes. A continuación una tabla de opradores:
Ej. RelationalDemo.java
Operador
Uso
Retorna verdadero
>
op1 > op2
op1 es mayor que op2
>=
op1 >= op2
op1 es mayor que o igual que op2
<
op1 < op2
op1 es menor que op2
<=
op1 <= op2
op1 es menor que o igual que op2
==
op1 == op2
op1 y op2 son iguales
!=
op1 != op2
op1 y op2 son diferentes
Operadores Condicionales
Los operadores relacionales frecuentemente son empleados con
operadores condicionales para construir más complejas expresiones de
toma de decisiones. El lenguaje de programación Java soporta seis
operadores condicionales – cinco binarios y uno unario - como aparece en
la siguiente tabla:
Operador
Uso
Retorna verdadero si
&&
op1 && op2
op1 y op2 son ambos verdad. (shortcircuit)
||
op1 | | op2
o op1 o op2 es verdad. (shortcircuit)
!
!op
op es falso.
&
op1 & op2
op1 y op2 son ambos verdad. (non-shortcircuit)
|
op1 | op2
op1 o op2 es verdad. (non-shortcircuit)
^
op1 ^ op2
si op1 y op2 son diferentes – esto es si uno u otro
de los operandos es verdad, pero no los dos.
Otros Operadores
La siguiente tabla lista los otros operadores que el lenguaje
Java soporta:
Operador
?:
Descripción
Abreviación if - else
[]
Empleado para declarar arreglos y accesar elementos.
.
Usado para formar nombres cualificados
( parametros )
Delimita una lista de parámetros separados por coma
( tipo )
Convierte un valor al tipo especificado
new
Crea un nuevo objeto ó un nuevo arreglo
instanceof
Determina si su primer operando es una instancia del segundo
operando. (descendencia directa o no).
Expresiones
Variables y operadores, los cuales aparecen en las secciones previas, son
bloques básicos que conforman los programas.
Se pueden combinar literales, variables, y operadores para formar
expresiones – segmentos de código que realizan cálculos y retornan
valores.
Una expresión es una serie de variables, operadores y llamadas a
métodos (construidas de acuerdo a la sintaxis del lenguaje) que
resultan en un valor simple.
Ej. count = 1
(count == 0)
x1 = -b + Math.sqrt((Math.sqr(b) + a*c)/ (2*a))
contador++
carácter = s1.charAt(0)
bandera = !bandera
Character.isUpperCase(aChar)
public class Cuadrado{
//atributo
int lado;
// constructor
public Cuadrado (int l){
lado = l;
}
// metodos
public int perimetro(){
return 4*lado;
}
public int area(){
return lado*lado;
}
public String toString(){
return "Cuadrado Lado = "+lado;
}
}
public class PruebaCuadrado{
public static void main(String[] args){
Cuadrado c = new Cuadrado(5);
System.out.println(c);
System.out.println("El perimetro es "+ c.perimetro());
System.out.println("El area es "+ c.area());
}
}
Instrucciones (Sentencias)
Una instrucción forma una completa unidad de ejecución.
Los siguientes tipos de expresiones pueden ser convertidas en
instrucciones finalizando la expresión con un punto y coma, ( ; ).
 Expresiones de asignación.
 Cualquier uso de ++ ó --.
 llamadas a métodos.
 Expresiones de creación de objetos.
Bloques
Un bloque es un grupo de cero o más instrucciones entre llaves
balanceadas (que abren y cierran) y que puede ser usada en
cualquier sitio donde una simple instrucción sea permitida. El
listado siguiente muestra dos bloques del programa
MaxVariablesDemo, conteniendo una instrucción simple:
if (Character.isUpperCase(aChar)) {
System.out.println("The character " + aChar + " is upper case.");
} else {
System.out.println("The character " + aChar + " is lower case.");
}
Instrucciones de Control de Flujo
Se pueden emplear instrucciones de control de flujo para:



condicionalmente ejecutar instrucciones,
repetidamente ejecutar bloques de instrucciones y
cambiar el flujo secuencial de control.
Ej:
char achar;
...
if (Character.isUpperCase(aChar))
System.out.println("The character " + aChar + " is upper case.");
else System.out.println("The character " + aChar + " is NOT a upper case.");
If/Else
La instrucción if / else permite al programa ejecutar
selectivamente otras instrucciones, basando la selección en
el resultado de una expresión booleana.
La forma general sería:
if (expression) statement
if (expression) statement else statement
Ej:
IfElseDemo.java
Ejemplos usando
if
if (height <= MAX) adjustment = 0;
else
adjustment = MAX-height;
if (total < 7) System.out.println(“Total menor que 7”);
if (firstCh != ‘a’ && limit < MAX) count++;
else
count = count /2;
class IfElseDemo {
public static void main(String[] args) {
int testscore = 76;
char grade;
}
}
if (testscore >= 90) {
grade = 'A';
} else if (testscore >= 80) {
grade = 'B';
} else if (testscore >= 70) {
grade = 'C';
} else if (testscore >= 60) {
grade = 'D';
} else {
grade = 'F';
}
System.out.println("Grade = " + grade);
La Instrucción Switch
Se emplea la instrucción switch para condicionalmente ejecutar
instrucciones basadas en expresiones de enteros.
Ej: SwitchDemo.java
switch (expresion) {
case expresion : estatutos;
break;
case expresion : estatutos;
break;
// mas casos
}
default : estatutos






La instrucción switch evalúa su expresión, y ejecuta la
instrucción (case) adecuada.
La expresion debe ser de tipo char, byte, short o int.
La expresion de cada caso, debe ser del mismo tipo de
la expresion del switch.
La expresion de cada caso debe ser UNICA.
La seccion default es opcional y se ejecuta cuando
ningun caso coincide con la expresion.
Instrucción break después de cada caso (case). Cada
instrucción break termina el bloque de switch, y el flujo de
control continúa con la primera instrucción que sigue
después del bloque de switch. Si no se colocaran
instrucciones break, el cursor de ejecución seguiría
ejecutando otros bloques case.
Ejemplo usando switch
char opcion;
System.out.println(“Selecciona la opcion deseada (A o B)”);
opcion = Keyboard.readChar();
switch (opcion){
case ‘A’ : System.out.println(“Seleccionaste la opcion A”);
break;
case ‘b’ : // acepta b o B
case ‘B’ : System.out.println(“Seleccionaste la opcion B”);
break;
default : System.out.println(“Opcion Invalida”);
}
class SwitchDemo {
public static void main(String[] args) {
int month = 8;
switch (month) {
case 1: System.out.println("January"); break;
case 2: System.out.println("February"); break;
case 3: System.out.println("March"); break;
case 4: System.out.println("April"); break;
case 5: System.out.println("May"); break;
case 6: System.out.println("June"); break;
case 7: System.out.println("July"); break;
case 8: System.out.println("August"); break;
case 9: System.out.println("September"); break;
case 10: System.out.println("October"); break;
case 11: System.out.println("November"); break;
case 12: System.out.println("December"); break;
default: System.out.println("Invalid month.");break;
}
}
}
class SwitchDemo2 {
public static void main(String[] args) {
int month = 2;
int year = 2000;
int numDays = 0;
switch (month) {
case 1: case 3: case 5: case 7: case 8: case 10:
case 12:
numDays = 31;
break;
case 4: case 6: case 9: case 11:
numDays = 30;
break;
case 2:
if ( ((year % 4 == 0) && !(year % 100 == 0))
|| (year % 400 == 0) )
numDays = 29;
else
numDays = 28;
break;
default:
System.out.println("Invalid month.");
break;
}
System.out.println("Number of Days = " + numDays);
}
}
Instrucción For
La instrucción for provee una forma compacta de iterar sobre un rango de
valores. La forma general de la instrucción for puede ser expresada como
esto:
for (initialization; termination; increment) {
estatuto
}
La expresion initialization es una expresión que inicializa el bucle. Es
ejecutada una vez al comienzo del bucle.
La expresión termination determina cuando terminar el bucle. Esta
expresión es evaluada al tope de cada iteración del bucle. Cuando la
expresión evalúa a falso, el bucle termina.
La expresión increment es invocada después de cada iteración.
Todos esos componentes son opcionales.
Los bucles for son frecuentemente utilizados para iterar sobre los
elementos de un arreglo, o los caracteres de un String.
Ej. ForDemo.java
Ejemplo usando for
// imprime los primeros n numeros enteros
for (int i=0; i<=n; i++)
System.out.println(i);
// imprime los primeros n numeros enteros pares
for (int i=0; i<=n; i++)
System.out.println((i*2));
// suma los primeros n numeros enteros
for (int i=0; i<=n; i++)
sum = sum + i;
System.out.println(sum);
class EnhancedForDemo {
public static void main(String[] args){
int[] numbers = {1,2,3,4,5,6,7,8,9,10};
for (int item : numbers) {
System.out.println("Count is: " + item);
}
}
}
While y Do-While
Se debe usar una instrucción while para continuamente ejecutar un bloque
de instrucciones mientras una condición permanezca verdadera. La sintaxis
general de while es:
while (expression) {
estatuto
}
Primero, la instrucción while evalúa la expresión, la cual debe retornar un
valor booleano. Si la expresión retorna verdadero, entonces la instrucción
while ejecuta las instrucciones dentro del bloque asociado. El proceso se
mantiene ininterrumpido hasta que la expresión retorne falso.
Ej. WhileDemo.java
Ejemplo usando while
// imprime los primeros n numeros enteros
int i=0;
while (i<=n) {
System.out.println(i);
i++;
}
// ciclo infinito
while (true) {
System.out.println(i);
i++;
}
while (!bandera) {
…
}
Do - While
Esta instrucción es muy similar a la anterior, con la
diferencia de que la evaluación de la instrucción se hace al
final, no al principio. Esto permite ejecutar por lo menos
una vez el bloque asociado sin evaluar la expresión.
do
estatuto;
while (expresionBooleana);
Ej: DoWhileDemo.java
Ejemplo usando do while
// imprime aun cuando la condicion es falsa
int i=10;
do {
System.out.println(i);
i++;
} while (i<=5) {
class DoWhileDemo {
public static void main(String[] args){
int count = 1;
do {
System.out.println("Count is: " + count);
count++;
} while (count <= 11);
}
}
Manejo de Excepciones
El lenguaje de programación Java provee un mecanismo conocido como
excepciones para ayudar a los programas a reportar y manejar errores. Cuando un
error ocurre, el programa arroja una excepción, lo cual significa que el flujo normal
de ejecución a quedado interrumpido y que el entorno de runtime intenta
encontrar un manejador de excepciones – un bloque de código que pueda manejar
un tipo particular de error. El manejador de excepciones puede intentar recuperar
del error ó, si determina que el error es irrecuperable, proveer una finalización
gentil del programa. Hay tres instrucciones que juegan un rol en el manejo de
excepciones: Try, Catch y Finally.
try {
statement(s)
} catch (exceptiontype name) {
statement(s)
} finally {
statement(s)
}
En otro apartado ampliaremos este tema.
Instrucciones de Ramificación
El lenguaje de programación
instrucciones de ramificación:
Break
Continue

Return.
Java
soporta
tres
Instrucción Break
La instrucción break tiene dos formas: con etiqueta ó sin
etiqueta. La forma sin etiqueta es empleada para terminar el
bucle interno en que se encuentre, mientras que la forma
con etiqueta permite terminar una instrucción marcada con
una etiqueta.
Sin etiqueta Ej: BreakDemo.java
Con etiqueta Ej: BreakWithLabelDemo.java
Instrucción Continue
La instrucción continue se emplea para saltar (obviar) la iteración
actual de un bucle for, while ó do-while.
La forma sin etiqueta salta hasta el final del bucle interno y evalúa
la expresión booleana que controla el bucle, básicamente obviando
el remanente de esta iteración del bucle.
La forma con etiqueta salta (obvia) la iteración actual con la
etiqueta dada. A continuación unos ejemplos con cada una de las
formas:
Sin etiqueta Ej: ContinueDemo.java
Con etiqueta Ej: ContinueWithLabelDemo.java
Instrucción Return
Se emplea la instrucción return para salir del método actual. El flujo de
control retorna a la instrucción que sigue al método llamador. La
instrucción return tiene dos formas: una que retorna un valor y otra que
no lo hace. Para retornar un valor, simplemente coloque el valor (o una
expresión que calcule el valor) después de la palabra reservada return:
return ++count;
El tipo de dato del valor retornado debe ser acorde con el tipo de dato de
retorno del método (en su declaración). Cuando un método es declarado
void, use la forma de return que no retorna valor.
return;
Conceptos de Programación
Orientada a Objetos
¿Que es un objeto?
Es un ente que posee estado y comportamiento.
A un objeto en particular se le llama instancia.
-
-
Estado: característica o condición del objeto.
- Nombre, color, ruedas, engranaje actual, etc.
Comportamiento: acciones que realiza el objeto.
- Ladrar, mover cola, acelerar, frenar
Encapsulación
Empacar las variables de un objeto dentro de la custodia
protectiva de sus métodos es denominado encapsulación.
•
Este es el ideal por el que se esfuerzan los modeladores de
sistemas POO, aunque muchas veces no se logra.
•
Ventajas de la Encapsulación


Modularidad: el código fuente para un objeto puede
ser escrito y mantenido independientemente del código
fuente de otros objetos.
Ocultamiento de información: un objeto tiene una
interfaz pública que otros objetos pueden usar para
comunicarse con él. El objeto puede mantener
información privada y métodos que pueden ser
cambiados en cualquier momento sin afectar los otros
objetos que dependen de él. Se logra un funcionamiento
tipo caja negra.
¿Qué es un Mensaje?


Los programas creados para resolver problemas complejos del
mundo real generalmente constan de muchos objetos que
interactúan muchas veces de forma compleja.
Los objetos de software interactúan y se comunican con cada
uno por medio de enviar y recibir mensajes entre sí. Cuando
el objeto A quiere que el objeto B ejecute uno de los métodos de
B, el objeto A envía un mensaje al objeto B.
Ventajas que Proveen los
Mensajes
1.
El comportamiento de un objeto es expresado a través
de sus métodos. así (aparte del acceso directo a
variables) el envío de mensajes soporta todas las
posibles interacciones entre objetos.
2.
Los objetos no necesitan estar en el mismo proceso o
aún en el mismo equipo para enviar y recibir mensajes
entre ellos.
¿Qué es una Clase?
En el mundo real, uno se encuentra con muchos objetos de un
mismo tipo. Ej, carros, bicicletas, etc.
Empleando terminología orientada a objetos, podríamos decir que
su objeto bicicleta es una instancia de la clase de objetos
conocidos como bicicletas. Las bicicletas tienen algún estado
(engranaje actual, cadencia actual, dos ruedas) y comportamiento
(cambio de engranaje, frenar) en común.
Sin embargo, cada estado de cada bicicleta es
independiente y puede ser diferente de las otras bicicletas.
Definición de Clase
En el software Orientado a Objetos, es también posible tener
muchos objetos del mismo tipo que comparten características:
rectángulos, empleados, registros, video clips, y así sucesivamente.
Al igual que los fabricantes de bicicletas, se puede tomar ventaja
del hecho que los objetos de la misma clase son similares y se
puede crear un modelo o definición para esos objetos.
Una clase es un plano, definición, o prototipo, que define
las variables y los métodos comunes a todos los objetos de
un cierto tipo.
Ejemplo de Clase
Variables de
instancia
La clase para nuestro ejemplo de bicicleta declararía las
variables de instancia necesarias para contener el
engranaje actual, la velocidad actual, y así sucesivamente,
para cada objeto de bicicleta.
La clase también declararía y proveería implementaciones
para los métodos de instancia que permiten al ciclista
cambiar engranaje, frenar, y cambiar la velocidad de pedal,
como es mostrado en la figura siguiente:
métodos de
instancia
Ejemplo de Clase 2
Una clase en Java, puede contener un metodo especial
llamado main, que es donde inicia la ejecucion. En este
ejemplo, la clase HolaMundo no contiene variables de
instancia ni metodos de instancia. Solo contiene el metodo
estatico main.
public class HolaMundo {
public static void main(String[] args) {
System.out.println(“Hola Mundo!");
}
}
Instancias de la Clase
Después que se ha creado la clase bicicleta, se pueden crear
cualquier número de objetos bicicleta a partir de la clase.
Cuando se crea una instancia de una clase, el sistema reserva
suficiente memoria para el objeto y todas sus variables de instancia.
Cada instancia obtiene su propia copia de todas las variables de
instancia definidas en la clase.
Variables de Clase
(Atributos)
En adición a las variables de instancia, las clases pueden definir
variables de clase. Una variable de clase contiene información que es
compartida por todas las instancias de la clase.
Si un objeto cambia la variable, ésta cambia para todos los
objetos de ése tipo.
public class Circulo {
public int x;
private static int contador = 0;
private float y = 10000.00F;
private String nombre = “Circulo”;
}
La variable contador
contiene un solo valor, el
cual es compartido por
todos los objetos de la
clase Circulo.
Métodos de Clase
Una clase puede también declarar métodos de clase. Un método
de clase se invoca directamente a partir de la clase, y no a traves de
un objeto.
La clase Math, contiene una serie de metodos de clase, los cuales
son invocados usando el nombre de la clase y el nombre del metodo.
class Prueba{
public static void main(String[] args) {
System.out.println(“La raiz cuadrada de 27 es “ + Math.sqrt(27));
}
}
El metodo sqrt de la clase Math es
estatico y por lo tanto se invoca
usando el nombre de la clase
¿Qué es Herencia?
En Java existe una jerarquia de clases que tiene como raiz
a la clase Object.

Nuevas clases pueden ser definidas usando clases ya
existentes.

Las clases creadas a partir de una clase serían denominadas
subclases o clase derivada. La clase usada para derivar
una nueva clase se le llama clase padre o superclase.

Los objetos son creados usando clases.

Condiciones de Herencia
Cada subclase hereda estado (en la forma de atributos) y
métodos a partir de la superclase.
Las subclases pueden agregar nuevas variables y métodos a
aquellos que heredan de la superclase o bien pueden
redefinir (sobreescribir) los metodos existentes para
especializar su comportamiento.
Condiciones de Herencia
Continuación
No estamos limitados a solo una capa de herencia. El árbol
de herencia, o jerarquía de clases, puede ser tan
profundo como se necesite. En general, en la medida que
se desciende en las capas de una jerarquía, más
especializado es su comportamiento.
Beneficios de la Herencia
Las subclases ofrecen comportamientos especializados a partir de la base
de los elementos comunes que provee la superclase. A través del uso de la
herencia, los programadores pueden reusar código en la superclase
muchas veces.

Los programadores pueden implementar superclases denominadas clases
abstractas que definen comportamientos genéricos. La superclase
abstracta define y podría parcialmente implementar el comportamiento,
pero mucho de la clase es indefinida y no implementada. Otros
programadores se encargarían de especificar los comportamientos con
subclases especializadas.

La Clase Object
La clase Object está en el tope de la jerarquía de clases, y cada
clase es su descendiente (directa ó indirectamente).
Una variable de tipo Object puede contener una referencia a
cualquier objeto, tal como una instancia de una clase o un
arreglo. Object provee comportamientos que son requeridos
para todos los objetos ejecutandose en la Maquina Virtual
Java (Java Virtual Machine).
Por ejemplo, todas las clases heredan de Object el método
toString, el cual retorna una representación del objeto.