Java - Oggetto e classi
Java è un linguaggio orientato agli oggetti. Essendo un linguaggio dotato della funzionalità Object-Oriented, Java supporta i seguenti concetti fondamentali:
- Polymorphism
- Inheritance
- Encapsulation
- Abstraction
- Classes
- Objects
- Instance
- Method
- Passaggio del messaggio
In questo capitolo esamineremo i concetti: classi e oggetti.
Object- Gli oggetti hanno stati e comportamenti. Esempio: un cane ha degli stati - colore, nome, razza e comportamenti - scodinzolare, abbaiare, mangiare. Un oggetto è un'istanza di una classe.
Class - Una classe può essere definita come un modello / progetto che descrive il comportamento / stato che l'oggetto del suo tipo supporta.
Oggetti in Java
Vediamo ora in profondità cosa sono gli oggetti. Se consideriamo il mondo reale, possiamo trovare molti oggetti intorno a noi, automobili, cani, umani, ecc. Tutti questi oggetti hanno uno stato e un comportamento.
Se consideriamo un cane, il suo stato è: nome, razza, colore e il comportamento è: abbaiare, scodinzolare, correre.
Se si confronta l'oggetto software con un oggetto del mondo reale, hanno caratteristiche molto simili.
Gli oggetti software hanno anche uno stato e un comportamento. Lo stato di un oggetto software viene memorizzato nei campi e il comportamento viene mostrato tramite metodi.
Quindi, nello sviluppo del software, i metodi operano sullo stato interno di un oggetto e la comunicazione da oggetto a oggetto avviene tramite metodi.
Classi in Java
Una classe è un progetto da cui vengono creati i singoli oggetti.
Di seguito è riportato un esempio di una classe.
Esempio
public class Dog {
String breed;
int age;
String color;
void barking() {
}
void hungry() {
}
void sleeping() {
}
}
Una classe può contenere uno dei seguenti tipi di variabili.
Local variables- Le variabili definite all'interno di metodi, costruttori o blocchi sono chiamate variabili locali. La variabile verrà dichiarata e inizializzata all'interno del metodo e la variabile verrà distrutta al termine del metodo.
Instance variables- Le variabili di istanza sono variabili all'interno di una classe ma al di fuori di qualsiasi metodo. Queste variabili vengono inizializzate quando viene creata un'istanza della classe. È possibile accedere alle variabili di istanza dall'interno di qualsiasi metodo, costruttore o blocco di quella particolare classe.
Class variables - Le variabili di classe sono variabili dichiarate all'interno di una classe, al di fuori di qualsiasi metodo, con la parola chiave statica.
Una classe può avere un numero qualsiasi di metodi per accedere al valore di vari tipi di metodi. Nell'esempio sopra, barking (), hungry () e sleeping () sono metodi.
Di seguito sono riportati alcuni degli argomenti importanti che devono essere discussi quando si esaminano le classi del linguaggio Java.
Costruttori
Quando si discute di classi, uno degli argomenti secondari più importanti sarebbero i costruttori. Ogni classe ha un costruttore. Se non scriviamo esplicitamente un costruttore per una classe, il compilatore Java costruisce un costruttore predefinito per quella classe.
Ogni volta che viene creato un nuovo oggetto, verrà richiamato almeno un costruttore. La regola principale dei costruttori è che dovrebbero avere lo stesso nome della classe. Una classe può avere più di un costruttore.
Di seguito è riportato un esempio di un costruttore:
Esempio
public class Puppy {
public Puppy() {
}
public Puppy(String name) {
// This constructor has one parameter, name.
}
}
Java supporta anche le classi Singleton in cui potresti creare solo un'istanza di una classe.
Note- Abbiamo due diversi tipi di costruttori. Discuteremo i costruttori in dettaglio nei capitoli successivi.
Creazione di un oggetto
Come accennato in precedenza, una classe fornisce i progetti per gli oggetti. Quindi, fondamentalmente, un oggetto viene creato da una classe. In Java, la nuova parola chiave viene utilizzata per creare nuovi oggetti.
Ci sono tre passaggi quando si crea un oggetto da una classe:
Declaration - Una dichiarazione di variabile con un nome di variabile con un tipo di oggetto.
Instantiation - La parola chiave "new" viene utilizzata per creare l'oggetto.
Initialization- La parola chiave "new" è seguita da una chiamata a un costruttore. Questa chiamata inizializza il nuovo oggetto.
Di seguito è riportato un esempio di creazione di un oggetto:
Esempio
public class Puppy {
public Puppy(String name) {
// This constructor has one parameter, name.
System.out.println("Passed Name is :" + name );
}
public static void main(String []args) {
// Following statement would create an object myPuppy
Puppy myPuppy = new Puppy( "tommy" );
}
}
Se compiliamo ed eseguiamo il programma sopra, produrrà il seguente risultato:
Produzione
Passed Name is :tommy
Accesso a variabili e metodi di istanza
È possibile accedere alle variabili e ai metodi di istanza tramite oggetti creati. Per accedere a una variabile di istanza, di seguito è riportato il percorso completo:
/* First create an object */
ObjectReference = new Constructor();
/* Now call a variable as follows */
ObjectReference.variableName;
/* Now you can call a class method as follows */
ObjectReference.MethodName();
Esempio
Questo esempio spiega come accedere alle variabili di istanza e ai metodi di una classe.
public class Puppy {
int puppyAge;
public Puppy(String name) {
// This constructor has one parameter, name.
System.out.println("Name chosen is :" + name );
}
public void setAge( int age ) {
puppyAge = age;
}
public int getAge( ) {
System.out.println("Puppy's age is :" + puppyAge );
return puppyAge;
}
public static void main(String []args) {
/* Object creation */
Puppy myPuppy = new Puppy( "tommy" );
/* Call class method to set puppy's age */
myPuppy.setAge( 2 );
/* Call another class method to get puppy's age */
myPuppy.getAge( );
/* You can access instance variable as follows as well */
System.out.println("Variable Value :" + myPuppy.puppyAge );
}
}
Se compiliamo ed eseguiamo il programma sopra, produrrà il seguente risultato:
Produzione
Name chosen is :tommy
Puppy's age is :2
Variable Value :2
Regole di dichiarazione del file di origine
Come ultima parte di questa sezione, esaminiamo ora le regole di dichiarazione del file sorgente. Queste regole sono essenziali quando si dichiarano classi, istruzioni di importazione e istruzioni di pacchetto in un file sorgente.
Può esserci una sola classe pubblica per file di origine.
Un file di origine può avere più classi non pubbliche.
Il nome della classe pubblica dovrebbe essere anche il nome del file sorgente che dovrebbe essere aggiunto da .javaalla fine. Ad esempio: il nome della classe è public class Employee {}, quindi il file di origine dovrebbe essere Employee.java.
Se la classe è definita all'interno di un pacchetto, l'istruzione del pacchetto dovrebbe essere la prima istruzione nel file sorgente.
Se sono presenti istruzioni di importazione, devono essere scritte tra l'istruzione del pacchetto e la dichiarazione della classe. Se non ci sono istruzioni del pacchetto, l'istruzione import dovrebbe essere la prima riga del file di origine.
Le istruzioni di importazione e pacchetto implicheranno tutte le classi presenti nel file sorgente. Non è possibile dichiarare istruzioni di importazione e / o pacchetto diverse a classi diverse nel file di origine.
Le classi hanno diversi livelli di accesso e ci sono diversi tipi di classi; classi astratte, classi finali, ecc. Spiegheremo tutto questo nel capitolo sui modificatori di accesso.
Oltre ai tipi di classi sopra menzionati, Java ha anche alcune classi speciali chiamate classi interne e classi anonime.
Pacchetto Java
In parole semplici, è un modo per classificare le classi e le interfacce. Quando si sviluppano applicazioni in Java, verranno scritte centinaia di classi e interfacce, pertanto classificare queste classi è un must e semplifica notevolmente la vita.
Dichiarazioni di importazione
In Java, se viene fornito un nome completo, che include il pacchetto e il nome della classe, il compilatore può facilmente individuare il codice sorgente o le classi. L'istruzione Import è un modo per fornire al compilatore la posizione corretta per trovare quella particolare classe.
Ad esempio, la riga seguente chiederebbe al compilatore di caricare tutte le classi disponibili nella directory installazione_java / java / io -
import java.io.*;
Un semplice caso di studio
Per il nostro caso di studio, creeremo due classi. Sono Employee e EmployeeTest.
Per prima cosa apri il blocco note e aggiungi il codice seguente. Ricorda che questa è la classe Employee e la classe è una classe pubblica. Ora salva questo file sorgente con il nome Employee.java.
La classe Employee ha quattro variabili di istanza: nome, età, designazione e stipendio. La classe ha un costruttore definito in modo esplicito, che accetta un parametro.
Esempio
import java.io.*;
public class Employee {
String name;
int age;
String designation;
double salary;
// This is the constructor of the class Employee
public Employee(String name) {
this.name = name;
}
// Assign the age of the Employee to the variable age.
public void empAge(int empAge) {
age = empAge;
}
/* Assign the designation to the variable designation.*/
public void empDesignation(String empDesig) {
designation = empDesig;
}
/* Assign the salary to the variable salary.*/
public void empSalary(double empSalary) {
salary = empSalary;
}
/* Print the Employee details */
public void printEmployee() {
System.out.println("Name:"+ name );
System.out.println("Age:" + age );
System.out.println("Designation:" + designation );
System.out.println("Salary:" + salary);
}
}
Come accennato in precedenza in questo tutorial, l'elaborazione inizia dal metodo principale. Pertanto, per poter eseguire questa classe Employee, dovrebbe esserci un metodo principale e gli oggetti dovrebbero essere creati. Creeremo una classe separata per questi compiti.
Di seguito è riportata la classe EmployeeTest , che crea due istanze della classe Employee e richiama i metodi per ogni oggetto per assegnare valori a ciascuna variabile.
Salvare il codice seguente nel file EmployeeTest.java.
import java.io.*;
public class EmployeeTest {
public static void main(String args[]) {
/* Create two objects using constructor */
Employee empOne = new Employee("James Smith");
Employee empTwo = new Employee("Mary Anne");
// Invoking methods for each object created
empOne.empAge(26);
empOne.empDesignation("Senior Software Engineer");
empOne.empSalary(1000);
empOne.printEmployee();
empTwo.empAge(21);
empTwo.empDesignation("Software Engineer");
empTwo.empSalary(500);
empTwo.printEmployee();
}
}
Ora, compila entrambe le classi e quindi esegui EmployeeTest per vedere il risultato come segue:
Produzione
C:\> javac Employee.java
C:\> javac EmployeeTest.java
C:\> java EmployeeTest
Name:James Smith
Age:26
Designation:Senior Software Engineer
Salary:1000.0
Name:Mary Anne
Age:21
Designation:Software Engineer
Salary:500.0
Cosa c'è dopo?
Nella prossima sessione, discuteremo i tipi di dati di base in Java e come possono essere utilizzati durante lo sviluppo di applicazioni Java.