Sie sind auf Seite 1von 8

Ing.

Oscar Ascn Valdivia 1


Clases
Conceptos de clase y objeto
Java es un lenguaje orientado a objetos puro, lo que significa que todo con lo que vamos a trabajar
en este lenguaje son objetos. Un objeto es un agregado de datos y de mtodos que permiten
manipular dichos datos, y un programa en Java no es ms que un conjunto de objetos que
interaccionan unos con otros a travs de sus mtodos.
Una clase es la definicin de las caractersticas concretas de un determinado tipo de objetos. Es
decir, de cules son los datos y los mtodos de los que van a disponer todos los objetos de ese tipo.
Por esta razn, se suele decir que el tipo de dato de un objeto es la clase que define las
caractersticas del mismo.
Sintaxis de definicin de clases
La sintaxis bsica para definir una clase es la que a continuacin se muestra:
class <nombreClase>
{
<miembros>
}
De este modo se definira una clase de nombre <nombreClase> cuyos miembros son los definidos
en <miembros> Los miembros de una clase son los datos y mtodos de los que van a disponer
todos los objetos de la misma. Un ejemplo de cmo declarar una clase de nombre A que no tenga
ningn miembro es la siguiente:
class A
{}
Campos: Un campo es un dato comn a todos los objetos de una determinada clase. Para
definir cules son los campos de los que una clase dispone se usa la siguiente sintaxis
dentro de la zona sealada como <miembros> en la definicin de la misma:
<tipoCampo> <nombreCampo>;
class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string DNI; // Campo de cada objeto Persona que almacena su DNI
}
Para acceder a un campo de un determinado objeto se usa la sintaxis:
<objeto>.<campo>
Ing. Oscar Ascn Valdivia 2
Por ejemplo, para acceder al campo Edad de un objeto Persona llamado p y cambiar
su valor por 20 se hara:
p.Edad = 20;
Mtodos: Un mtodo es un conjunto de instrucciones a las que se les asocia un nombre de
modo que si se desea ejecutarlas basta referenciarlas a travs de dicho nombre en vez de
tener que escribirlas. Dentro de estas instrucciones es posible acceder con total libertad a la
informacin almacenada en los campos pertenecientes a la clase dentro de la que el mtodo
se ha definido, por lo que como al principio del tema se indic, los mtodos permiten
manipular los datos almacenados en los objetos.
La sintaxis que se usa en Java para definir los mtodos es la siguiente:
<tipoDevuelto> <nombreMtodo> (<parametros>)
{
<instrucciones>
}
Todo mtodo puede devolver un objeto como resultado de la ejecucin de las instrucciones
que lo forman, y el tipo de dato al que pertenece este objeto es lo que se indica en
<tipoDevuelto>. Si no devuelve nada se indica void, y si devuelve algo es obligatorio
finalizar la ejecucin de sus instrucciones con alguna instruccin return <objeto>; que
indique qu objeto ha de devolverse.
Un ejemplo de cmo declarar un mtodo de nombre Cumpleaos es la siguiente
modificacin de la definicin de la clase Persona usada antes como ejemplo:
class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string DNI; // Campo de cada objeto Persona que almacena su DNI
void Cumpleaos() // Incrementa en uno de la edad del objeto Persona
{
Edad++;
}
}
La sintaxis usada para llamar a los mtodos de un objeto es la misma que la usada para
llamar a sus campos, slo que ahora tras el nombre del mtodo al que se desea llamar
hay que indicar entre parntesis cules son los valores que se desea dar a los parmetros
del mtodo al hacer la llamada. O sea, se escribe:
<objeto>.<mtodo>(<parmetros>)
Como es lgico, si el mtodo no tomase parmetros se dejaran vacos los
parmetros en la llamada al mismo. Por ejemplo, para llamar al mtodo Cumpleaos() de
un objeto Persona llamado p se hara:
p.Cumpleaos(); // El mtodo no toma parmetros, luego no le pasamos ninguno
Ing. Oscar Ascn Valdivia 3
Es importante sealar que en una misma clase pueden definirse varios mtodos con el
mismo nombre siempre y cuando tomen diferente nmero o tipo de parmetros. A esto se
le conoce como sobrecargar de mtodos, y es posible ya que cuando se les llame el
compilador sabr a cual llamar a partir de <parmetros> pasados en la llamada.
Creacin de objetos
Operador new
La utilidad del operador new, que precisamente es crear objetos y cuya sintaxis es:
new <nombreTipo>(<parametros>)
Este operador crea un nuevo objeto del tipo cuyo nombre se le indica y llama durante su proceso
de creacin al constructor del mismo apropiado segn los valores que se le pasen en <parametros>,
devolviendo una referencia al objeto recin creado. Hay que resaltar el hecho de que new no
devuelve el propio objeto creado, sino una referencia a la direccin de memoria dinmica donde
en realidad se ha creado.
El constructor recibe ese nombre debido a que su cdigo suele usarse precisamente para construir
el objeto, para inicializar sus miembros. Por ejemplo, a nuestra clase de ejemplo Persona le
podramos aadir un constructor dejndola as:
class Persona
{
string Nombre; // Campo de cada objeto Persona que almacena su nombre
int Edad; // Campo de cada objeto Persona que almacena su edad
string DNI; // Campo de cada objeto Persona que almacena su DNI
void Cumpleaos() // Incrementa en uno la edad del objeto Persona
{
Edad++;
}
Persona (string nombre, int edad, string dni) // Constructor
{
Nombre = nombre;
Edad = edad;
DNI= dni;
}
}
Como se ve en el cdigo, el constructor toma como parmetros los valores con los que deseemos
inicializar el objeto a crear. Gracias a l, podemos crear un objeto Persona de nombre Jos, de 22
aos de edad y DNI 32734949 as:
new Persona(Jos, 22, 32734949)
En realidad un objeto puede tener mltiples constructores, aunque para diferenciar a unos de otros
es obligatorio que se diferencien en el nmero u orden de los parmetros que aceptan, ya que el
nombre de todos ellos ha de coincidir con el nombre de la clase de la que son miembros. De ese
Ing. Oscar Ascn Valdivia 4
modo, cuando creemos el objeto el compilador podr inteligentemente determinar cul de los
constructores ha de ejecutarse en funcin de los valores que le pasemos al new.
Una vez creado un objeto lo ms normal es almacenar la direccin devuelta por new en una
variable del tipo apropiado para el objeto creado. El siguiente ejemplo -que como es lgico ir
dentro de la definicin de algn mtodo- muestra cmo crear una variable de tipo Persona llamada
p y cmo almacenar en ella la direccin del objeto que devolvera la anterior aplicacin del
operador new:
Persona p; // Creamos variable p
p = new Persona(Jose, 22, 32734949); // Almacenamos en p el objeto creado con new
Constructor por defecto
No es obligatorio definir un constructor para cada clase, y en caso de que no definamos ninguno el
compilador crear uno por nosotros sin parmetros ni instrucciones. Es decir, como si se hubiese
definido de esta forma:
<nombreTipo>()
{
}
Gracias a este constructor introducido automticamente por el compilador, si Coche es una clase
en cuya definicin no se ha incluido ningn constructor, siempre ser posible crear uno nuevo
usando el operador new as:
Coche c = new Coche(); // Crea coche c llamando al constructor por defecto de Coche
Hay que tener en cuenta una cosa: el constructor por defecto es slo incluido por el compilador si
no hemos definido ningn otro constructor. Por tanto, si tenemos una clase en la que hayamos
definido algn constructor con parmetros pero ninguno sin parmetros no ser vlido crear
objetos de la misma llamando al constructor sin parmetros, pues el compilador no lo habr
definido automticamente. Por ejemplo, con la ltima versin de la clase de ejemplo Persona es
invlido hacer:
Persona p = new Persona(); // ERROR: El nico constructor de persona toma 3 parmetros
Herencia
Concepto de herencia
El mecanismo de herencia es uno de los pilares fundamentales en los que se basa la programacin
orientada a objetos. Es un mecanismo que permite definir nuevas clases a partir de otras ya
definidas de modo que si en la definicin de una clase indicamos que sta deriva de otra, entonces
la primera -a la que se le suele llamar clase hija- ser tratada por el compilador automticamente
como si su definicin incluyese la definicin de la segunda a la que se le suele llamar clase
padre o clase base. Las clases que derivan de otras se definen usando la siguiente sintaxis:
Ing. Oscar Ascn Valdivia 5
class <nombreHija>extends <nombrePadre>
{
<miembrosHija>
}
A los miembros definidos en <miembrosHijas> se le aadirn los que hubisemos definido en la
clase padre. Por ejemplo, a partir de la clase Persona puede crearse una clase Trabajador as:
class Trabajador extends Persona
{
public int Sueldo;
public Trabajador(string nombre, int edad, string nif, int sueldo)
: base(nombre, edad, nif)
{
Sueldo = sueldo;
}
}
Los objetos de esta clase Trabajador contarn con los mismos miembros que los objetos Persona y
adems incorporarn un nuevo campo llamado Sueldo que almacenar el dinero que cada
trabajador gane.
Un ejemplo que pone de manifiesto cmo funciona la herencia es el siguiente:
class Persona
{
public string Nombre; // Campo de cada objeto Persona que almacena su nombre
public int Edad; // Campo de cada objeto Persona que almacena su edad
public string DNI; // Campo de cada objeto Persona que almacena su DNI
void Cumpleaos() // Incrementa en uno de edad del objeto Persona
{
Edad++;
}
public Persona (string nombre, int edad, string nif) // Constructor de Persona
{
Nombre = nombre;
Edad = edad;
NIF = nif;
}
}
class Trabajador extends Persona
{
public int Sueldo; // Campo de cada objeto Trabajador que almacena cunto gana
Trabajador(string nombre, int edad, string dni, int sueldo)
{ // Inicializamos cada Trabajador en base al constructor de Persona
Sueldo = sueldo;
}
Ing. Oscar Ascn Valdivia 6
Programacin Orientada a Objetos
Clase cRacional
package ejemplo;
public class cRacional {
int numerador;
int denominador;
void asignardatos(int num,int den){
numerador=num;
if (den==0) den=1;
denominador=den;
}
void mostrarracional()
{
System.out.println(numerador+" / "+ denominador);
}
int calcular()
{
return numerador/denominador;
}
}
Clase Main
package ejemplo;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
cRacional r=new cRacional(10,2);
r.mostrarracional();
System.out.println("Resultado: " + r.calcular());
int a,b;
System.out.println("Numerador: ");
a=Integer.parseInt(sc.nextLine());
System.out.println("Denominador: ");
b=Integer.parseInt(sc.nextLine());
r.asignardatos(a, b);
r.mostrarracional();
System.out.println("Resultado: " + r.calcular());
}
}
package ejemplo;
public class cRacional {
int numerador;
int denominador;
public cRacional()
{
}
public cRacional(int n,int d)
{
numerador=n;
denominador=d;
}
void asignardatos(int num,int den){
numerador=num;
if (den==0) den=1;
denominador=den;
}
void mostrarracional()
{
System.out.println(numerador+" / "+
denominador);
}
int calcular()
{
return numerador/denominador;
}
}
Ing. Oscar Ascn Valdivia 7
Implementar los siguientes ejercicios utilizando clases
1. Escribir una clase que lea tres notas y calcule el promedio de las notas.
Promedio=(n1+n2+2*n3)/4.
2. Escribir una clase en donde se ingrese los das trabajados, y se calcule el sueldo neto, el
sueldo = das trabajados por jornal da menos el descuento. (El jornal da =30, el
descuento afp=11% del sueldo).
3. Escribir una clase que lea un numero y escriba su cuadrado.
4. Escribir una clase que exprese en horas, minutos y segundos un tiempo expresado en
segundos.
5. Disear una clase que realice la siguiente conversin: una temperatura dada en grados
Celsius a grados Fahrenheit. ( F = (9/5) C + 32 ).
6. Escribir una clase que obtenga la ultima cifra de un numero.
7. Escribir una clase que lea un numero e indique si el numero es positivo o negativo.
8. Escribir una clase que calcule el sueldo de un empleado dados los das trabajados y el
jornal diario; si el sueldo es mayor que 1000, entonces tiene un descuento del 10% caso
contrario no hay ningn descuento.
9. Escribir una clase que calcule las nota promedio de un alumno dadas dos notas, si el
promedio es mayor o igual a 10.5 entonces mostrar aprobado, caso contrario mostrar
Jalado.
10. Escribir una clase que lea un numero e indique si el numero es par o impar.
11. Escribir una clase que lea dos nmeros e indique cual es el mayor y cual es el menor.
12. Calcular el factorial de un numero N
13. Calcular la suma de los N primeros nmeros
14. Disear un clase para imprimir la suma de los nmeros impares menores o iguales que N.
15. Escribir una clase para obtener la suma de los nmeros pares hasta 500 inclusive.
Ing. Oscar Ascn Valdivia 8
Ejemplo de Herencia
package ejemplo;
public class Persona {
String nombre;
String apellido;
}
package ejemplo;
public class Trabajador extends Persona {
int dias;
int jornal;
void asignardatos(String n,String a,int di,int jo){
nombre=n;
apellido=a;
if (di>30 || di<0) di=0;
dias =di;
if (jo<0) jo=0;
jornal=jo;
}
void mostrarracional()
{
System.out.println(nombre+" "+ apellido+" "+jornal+" "+dias);
}
int calcular()
{
return dias*jornal;
}
}
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
Trabajador t=new Trabajador();
String n,a;
int d,j;
System.out.println("Nombre: ");
n=sc.nextLine();
System.out.println("Apellido: ");
a=sc.nextLine();
System.out.println("Dias trabajador: ");
d=Integer.parseInt(sc.nextLine());
System.out.println("Jornalr: ");
j=Integer.parseInt(sc.nextLine());
t.asignardatos(n, a, d, j);
t.mostrardatos();
System.out.println("Sueldo:" + t.calcular());
}
}

Das könnte Ihnen auch gefallen