Abans que pugui seguir avançant en el seu estudi de Java, necessita aprendre sobre la classe. La classe és l’essència de Java. És la base sobre la qual es construeix tot el llenguatge Java perquè la classe defineix la naturalesa d’un objecte. Com a tal, la classe forma la base per a la programació orientada a objectes en Java.
Dins d’una classe es defineixen les dades i el codi que actua sobre aquestes dades. El codi està contingut en mètodes. A causa de que les classes, els objectes i els mètodes són fonamentals per a Java, els detallem aquí. Tenir una comprensió bàsica d’aquestes característiques li permetrà escriure programes més sofisticats i comprendre millor certs elements claus de Java que es descriuen més endavant.
Table de contingut
1. què és una classe
Com que tota l’activitat de el programa Java passa dins d’una classe, hem estat utilitzant classes des del començament d’aquest curs. Per descomptat, només s’han utilitzat classes extremadament simples, i no hem aprofitat la majoria de les seves característiques. Com veurà, les classes són substancialment més poderoses que les limitades presentades fins ara.
Què és una classe? Una classe és una plantilla que defineix la forma d’un objecte. Especifica les dades i el codi que operarà en aquestes dades. Java fa servir una especificació de classe per construir objectes. Els objectes són instàncies d’una classe. Per tant, una classe és essencialment un conjunt de plans que especifiquen com construir un objecte.
És important tenir clar que una classe és una abstracció lògica.
2. La forma general d’una classe
Quan defineixes una classe, declares la seva forma i naturalesa exactes. Per a això, especifiqui les variables d’instància que conté i els mètodes que operen en elles. Tot i que les classes molt simples poden contenir només mètodes o només variables d’instància, la majoria de les classes de l’món real contenen totes dues.
Una classe es crea a l’usar la paraula clau. Aquí es mostra una forma general simplificada d’una definició de classe:
class NombreClase{ //Declarar variables de instancia tipo var1; tipo var2; //.. //Declarar métodos tipo metodo1(parámetros){ //Cuerpo del método } tipo metodo2(parámetros){ //Cuerpo del método }}
Tot i que no hi ha una regla sintàctica que s’hagi de complir, una classe ben dissenyada hauria de definir una i només una entitat lògica. Per exemple, una classe que emmagatzema noms i números de telèfon normalment no emmagatzemarà informació sobre el mercat de valors, la mitjana de precipitacions o altra informació no relacionada. El punt aquí és que una classe ben dissenyada agrupa la informació connectada lògicament. ¡Posar informació no relacionada en la mateixa classe des-s’estructurarà ràpidament el teu codi!
Fins a aquest punt, les classes que hem estat utilitzant tenen només un mètode:. Aviat veuràs com crear altres. No obstant això, observi que la forma general d’una classe no especifica un mètode. Es requereix un mètode sol si aquesta classe és el punt de partida per al seu programa. A més, alguns tipus d’aplicacions Java no requereixen un.
3. Definició d’una classe
Per a il·lustrar les classes, desenvoluparem una classe que encapsula informació sobre vehicles, com ara automòbils, furgonetes i camions. Aquesta classe es diu vehicle, i emmagatzemarà tres elements de la informació sobre un vehicle: el nombre de passatgers que pot portar, la seva capacitat de combustible, i la quantitat mitjana de combustible consumit (en milles per galó).
Llavors, es defineix tres variables d’instància: passatgers, capacitat i mpg. Tingueu present que el vehicle no conté cap mètode. Per tant, actualment és una classe de només dades.
class Vehiculo{ int pasajeros; //número de pasajeros int capacidad; //capacidad en galones int mpg; //consumo de combustible en millas por galón}
Una definició de classe crea un nou tipus de dades. En aquest cas, el nou tipus de dades es diu Vehicle. Farà servir aquest nom per declarar objectes de tipus Vehicle. Recordeu que una declaració de classe és només una descripció de tipus; no crea un objecte real. Així, el codi anterior no fa que cap objecte de tipus Vehicle entri existència.
4. Com es crea un objecte?
Per a crear realment un objecte de vehicle, farà servir una instrucció com la següent:
Vehiculo minivan = new Vehiculo(); //Creando un objeto vehículo llamado minivan
Després que s’executi aquesta declaració, minivan es refereix a una instància de el vehicle. Per tant, tindrà la realitat “física”. De moment, no es preocupi pels detalls d’aquesta declaració.
Cada vegada que es crea una instància d’una classe, es crea un objecte que conté la seva pròpia còpia de cada variable d’instància definida per la classe.
Així, cada objecte de el vehicle contindrà seves pròpies còpies de les variables de la instància passatgers, capacitat, i mpg. Per accedir a aquestes variables, es farà servir l’operador punt (.). L’operador punt vincula el nom d’un objecte amb el nom d’un membre. La forma general d’l’operador punt es mostra aquí:
Objeto.Miembro
Per tant, l’objecte s’especifica a l’esquerra, i el membre es posa a la dreta. Per exemple, per assignar la variable capacitat de minivan a la valor 16, utilitzeu la següent instrucció:
minivan.capacidad = 16
En general, es pot utilitzar l’operador punt per accedir a les variables d’instància i als mètodes. Aquí està un programa complet que utilitza la classe
/* Un programa que usa la clase Vehiculo El archivo se llama DemoVehiculo.java */class Vehiculo { int pasajeros; //números de pasajeros int capacidad; //capacidad del combustible en galones int mpg; //combustible consumido en millas por galon}//Esta clase declara un objeto de tipo Vehiculoclass DemoVehiculo { public static void main(String args) { Vehiculo minivan = new Vehiculo(); int rango; //asignando valores a los campos de minivan minivan.pasajeros = 9; minivan.capacidad = 15; minivan.mpg = 20; //Calcular el rango asumiendo un tanque lleno rango = minivan.capacidad * minivan.mpg; System.out.println("La Minivan puede llevar " + minivan.pasajeros + " pasajeros con un rango de " + rango + " millas"); }}
Sortida:
La Minivan puede llevar 9 pasajeros con un rango de 300 millas
Ha trucar a l’arxiu que conté aquest programa VehiculoDemo.java perquè el mètode main () és a la classe anomenada VehiculoDemo, no en la classe anomenada Vehicle.
Quan compili aquest programa, trobareu que s’han creat dos arxius. Class, un per a Vehicle i un altre per VehiculoDemo. El compilador de Java posa automàticament cada classe en el seu propi arxiu .class. No cal que tant Vehicle com la classe VehiculoDemo estiguin en el mateix arxiu font. Podria posar cada classe en el seu propi arxiu, anomenat VehiculoDemo.java i VehiculoDemo.java, respectivament.
5. Creació de diversos objectes
Abans de continuar, repassem un principi fonamental: cada objecte té les seves pròpies còpies de les variables d’instància definides per la seva classe. Així, el contingut de les variables en un objecte pot diferir d’el contingut de les variables en un altre.
No hi ha connexió entre els dos objectes excepte pel fet que tots dos són objectes de el mateix tipus. Per exemple, si té dos objectes de Vehicle, cada un té la seva pròpia còpia de passatgers, capacitat i mpg, i el contingut d’aquests pot diferir entre els dos objectes.
El següent programa demostra aquest fet. (Observi que la classe amb es diu ara DosVehiculos.)
//Este programa crea dos objetos Vehiculoclass Vehiculo { int pasajeros; //números de pasajeros int capacidad; //capacidad del combustible en galones int mpg; //combustible consumido en millas por galon}//Esta clase declara un objeto de tipo Vehiculoclass DosVehiculo { public static void main(String args) { Vehiculo minivan = new Vehiculo(); Vehiculo sportscar = new Vehiculo(); int rango1, rango2; //asignando valores a los campos de minivan minivan.pasajeros = 9; minivan.capacidad = 15; minivan.mpg = 20; //asignando valores a los campos de sportscar sportscar.pasajeros = 10; sportscar.capacidad = 25; sportscar.mpg = 30; //Calcular el rango asumiendo un tanque lleno rango1 = minivan.capacidad * minivan.mpg; rango2 = sportscar.capacidad * sportscar.mpg; System.out.println("La Minivan puede llevar " + minivan.pasajeros + " pasajeros con un rango de " + rango1 + " millas"); System.out.println("El Sportscar puede llevar " + sportscar.pasajeros + " pasajeros con un rango de " + rango2 + " millas"); }}
Sortida:
La Minivan puede llevar 9 pasajeros con un rango de 300 millasEl Sportscar puede llevar 10 pasajeros con un rango de 750 millas
6. variables de referència i assignació
En una operació d’assignació, les variables de referència d’objecte actuen de forma diferent a les variables d’un tipus primitiu, com int.
- Quan s’assigna una variable de tipus primitiu a una altra, la situació és senzilla. La variable de l’esquerra rep una còpia de la valor de la variable a la dreta.
- A l’assignar una variable de referència d’objecte a una altra, la situació és una mica més complicada perquè està canviant l’objecte a què es refereix la variable de referència. L’efecte d’aquesta diferència pot causar alguns resultats contraintuïtius.
Per exemple, tingui en compte el següent fragment:
Vehiculo auto1 = new Vehiculo();Vehiculo auto2 = auto1;
a primera vista, és fàcil pensar que auto1 i auto2 es refereixen a diferents objectes, però aquest no és el cas. En el seu lloc, auto1 i auto2 es referiran a el mateix objecte. L’assignació de auto1 a auto2 simplement fa que auto2 faci referència a el mateix objecte que auto1. Així, l’objecte pot ser actuat per qualsevol de auto1 o auto2. Per exemple, després de l’assignació
auto1.mpg = 28;
Si executeu, totes dues instruccions amb println ():
System.out.println(auto1.mpg);System.out.println(auto2.mpg);
¿Endevina què? Es mostra el mateix valor: 28.
Encara que auto1 i auto2 es refereixen a la mateixa finalitat, no estan vinculats de cap altra manera. Per exemple, una assignació posterior a auto2 simplement canvia l’objecte a què es refereix auto2. Per exemple:
Vehiculo auto1 = new Vehiculo();Vehiculo auto2 = auto1;Vehiculo auto3 = new Vehiculo();
auto2 = auto3; //Ahora auto2 y auto3 se refieren al mismo objeto
Un cop executada aquesta seqüència, auto2 es refereix a el mateix objecte que auto3.
Si t’ha quedat algun dubte si us plau Comenta-. Fins aviat!