GNU/Linux >> Linux Esercitazione >  >> Linux

Procedura:Programmazione orientata agli oggetti – Altro con classi e oggetti

Giro bonus

Bentornati alla nostra Introduzione alla programmazione orientata agli oggetti! Forse sarebbe più appropriato dire:"Benvenuti al Bonus Round della nostra Introduzione alla programmazione orientata agli oggetti!". Questo articolo e quello che segue sono per quelli di voi che vogliono saperne di più su alcuni dei fondamenti dell'Orientamento agli oggetti e che apprezzano alcuni contenuti bonus!

Per rivedere, se hai seguito alcuni dei primi cinque articoli di questa serie, hai imparato un bel po' di cose:

  • Come l'astrazione aiuta a semplificare le attività di programmazione.
  • Le basi di classi, metodi e proprietà dell'orientamento agli oggetti.
  • Le basi dell'utilizzo di variabili e tipi e della manipolazione dei dati.
  • Come gestire il controllo del flusso con for e while loop.
  • Come mettere insieme tutto questo per creare un semplice programma.

Questo articolo e il prossimo prenderanno ciò che hai imparato da quell'introduzione e ti mostreranno di più su come puoi usare alcuni dei principi dell'orientamento agli oggetti (spesso abbreviati OO) per creare codice efficiente e ben organizzato. Inizieremo con un nuovo programma che ci consentirà di rivedere alcuni concetti di base e portare ad alcuni nuovi concetti, come i costruttori e eredità .

Ancora una volta, programmeremo in C# usando Visual Studio di Microsoft. Se vuoi continuare (e non l'hai già fatto) puoi trovare la configurazione proprio qui.

Se segui la configurazione in quell'articolo fino alla sezione "Under the Hood", sarai proprio da dove inizieremo. L'unica cosa che farò diversamente da quell'articolo è che non userò il nome del progetto predefinito "ConsoleApplication1". Invece, chiamerò il mio progetto "PettingZoo" (in una parola) perché costruiremo uno zoo come programma di esempio.

Nota:l'orientamento agli oggetti è disponibile in molte lingue e piattaforme e i concetti sono molto simili. Ho scelto C# perché è facile iniziare e tutte le risorse necessarie sono gratuite. Potresti avere altre lingue e piattaforme che desideri utilizzare e anche questo va bene. Siamo qui per imparare l'orientamento agli oggetti, non qualsiasi linguaggio o implementazione in particolare.

.

Configurazione iniziale

Prima di iniziare, verifica di avere un'applicazione console creata in Visual Studio. Dovrebbe assomigliare alla Figura 1.

Figura 1:Configurazione iniziale del programma PettingZoo

Con questa applicazione console disponibile in Visual Studio, possiamo iniziare a creare la nostra prima classe. In C# esistono diversi modi per creare una classe. In alcune lingue, come Java, è necessario creare classi in modi specifici utilizzando nomi di file e modelli di cartelle specifici, ma C# si preoccupa solo di dire che qualcosa è una classe.

Nota che anche nell'applicazione console predefinita, hai già una classe chiamata Program . Usando la parola chiave class seguito dal nome della classe è il modo in cui si definisce una classe in C#.

Per il nostro approccio, creeremo un nuovo file di codice per tenere le nostre classi. Fare clic con il pulsante destro del mouse sul nodo PettingZoo nel riquadro Esplora soluzioni, quindi fare clic su Aggiungi->Classe, come mostrato nella Figura 2.

Figura 2:aggiunta di una classe con Esplora soluzioni

Nella finestra di dialogo che si apre, trova l'elemento Code cercando o navigando e chiama il tuo file di classe come Animals.cs, come mostrato nella Figura 3.

Figura 3:finestra di dialogo per l'aggiunta del file di classe

Ora dovresti ottenere un nuovo file di classe creato da Visual Studio che contiene qualcosa del genere:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PettingZoo
{
    class Animals
    {
    }
}

Si noti che per impostazione predefinita Visual Studio crea sia un file di classe che una definizione di classe all'interno in base al nome file scelto. In alcuni linguaggi, come Java, questa struttura è un requisito, ma in C# non è così rigida. Cambieremo il nome della classe tra un momento, ma per ora lo lasceremo.

Nel file Visual Studio appena creato, noterai un certo numero di using istruzioni e uno namespace blocco di codice. Queste righe non sono importanti per la nostra classe, ma, nel caso tu sia curioso, uno spazio dei nomi in C# è un modo per organizzare i nomi nel tuo progetto. Puoi avere più classi con lo stesso nome, ad esempio, organizzate in spazi dei nomi diversi.

Finché lavori all'interno di un singolo spazio dei nomi, l'indirizzamento delle classi è abbastanza semplice. Ma se hai bisogno di organizzare il tuo progetto in divisioni più complesse, potresti dover utilizzare spazi dei nomi diversi, nel qual caso il using le istruzioni ti consentono di creare collegamenti a quegli spazi dei nomi.

.

Classi e oggetti

Il file che hai ora contiene una classe premade con un nome basato sul nome del file che hai scelto. Non avremo un Animals classe, però, quindi cambiamo con qualcos'altro. In uno zoo, ovviamente, abbiamo bisogno di cani, quindi cambia il nome della classe da Animals a Dog :

class Dog
{
}

Nota il cambiamento da Animals (plurale) a Dog (singolare). Creeremo un'altra classe in seguito chiamata Animal , quindi fai attenzione quando leggi il codice che cogli su sfumature del genere.

Prima di iniziare ad aggiungere qualsiasi contenuto alla classe, esaminiamo la differenza tra classi e oggetti. Ricorda che una classe è il modello per come dovrebbero essere gli oggetti. Un'analogia semplicistica e poco precisa è quella di una ricetta e di una torta.

(Questa sezione è una rassegna di classi e oggetti adattati dalla spiegazione presentata nell'articolo collegato sopra. Se vuoi saltare questo aggiornamento e passare direttamente alla programmazione, passa direttamente alla sezione successiva! Altrimenti, goditi un po' di torta!)

La ricetta ti spiega come fare una torta ed è quindi, in termini OO, una classe . Una torta è il risultato dell'esecuzione della ricetta e, ancora una volta, in termini OO, è un oggetto . Un altro termine usato frequentemente è istanza , per indicare che la torta è un'istanza dell'esecuzione di una ricetta.

Come per le torte e le ricette, ogni torta è una torta unica. Quello che fai a una torta non ha effetto su nessun'altra torta. Mettere la glassa su un cupcake non significa che tutti i cupcakes ora abbiano la glassa. Allo stesso modo, se mangi un cupcake, ti rimangono ancora tutti gli altri.

Tuttavia, avere una ricetta e sapere che produce una torta non è abbastanza. Hai anche bisogno di una cucina in cui cuocere la torta. In termini OO, questo è il programma in cui crei l'oggetto e, nel nostro caso, quello sarebbe il file Program.cs principale.

.

Torna al PettingZoo

Usiamo la nostra nuova classe per creare un Dog oggetto, quindi apri il file Program.cs e aggiungi la seguente riga all'interno di static void main blocco di codice:

Dog myDog = new Dog();

Questa riga creerà un nuovo Dog oggetto dal Dog classe e salvarlo in myDog variabile. Permettetemi di suddividere questa riga in tre parti in modo da poter spiegare cosa succede.

[1]Dog [2]myDog = [3]new Dog();

Il primo elemento [1], Dog , è il tipo di variabile che vogliamo creare. In linguaggi tipizzati staticamente come C# e Java, è necessario dichiarare di che tipo è una variabile prima di poterle assegnare valori. I linguaggi digitati dinamicamente, come JavaScript o Perl, non lo richiedono e attribuiscono allo sviluppatore la responsabilità di tenere traccia del tipo di dati contenuti in una variabile.

Il secondo elemento [2], myDog , è il nome della variabile che utilizziamo per accedere all'oggetto. Questo non è necessariamente il nome del cane che creiamo, ma piuttosto quello che usiamo per fare riferimento a questa particolare istanza di un Dog classe.

Nota:per ulteriori informazioni su variabili e tipi di dati come le stringhe, consulta il nostro articolo di introduzione alla programmazione su variabili e tipi.

.
Infine, il terzo elemento [3], new Dog() , ci dice che vogliamo creare o istanziare –un nuovo oggetto basato sul Dog classe. Nota che ci sono parentesi dopo il nome della classe, il che significa che questo è in realtà un metodo . Torneremo a questo metodo, che è un metodo speciale chiamato costruttore (approfondiremo i costruttori nel prossimo articolo collegato di seguito).

Con il nostro programma ora creiamo un nuovo oggetto dal Dog classe che memorizza in myDog variabile, possiamo iniziare ad accedere alle proprietà e al metodo del nostro oggetto. A parte, ovviamente, che la nostra classe è completamente vuota e priva di contenuti! Risolviamolo.
.

Proprietà e metodi

Torniamo al nostro file Animals.cs, dove il nostro Dog la classe ha un nome ma nient'altro. Tuttavia, tutto ciò che inseriamo in questo blocco di codice diventerà parte della definizione della classe. Ricorda, le classi hanno proprietà e metodi che definiscono, rispettivamente, cos'è un oggetto e cosa può fare.

Creiamo sia una proprietà che un metodo, quindi discuteremo di cosa fanno ciascuno. Tra parentesi graffe del blocco di codice, {} , aggiungi le seguenti due righe:

string Name;
void Speak() { Console.WriteLine("Woof"); }

La prima riga (string Name; ) è una proprietà o campo . Nell'orientamento agli oggetti, le proprietà definiscono cos'è qualcosa. Nel nostro caso, vogliamo che il nostro cane abbia un nome, quindi abbiamo creato una proprietà string per contenere il nome del cane.

Ricorda che l'orientamento agli oggetti cerca di creare rappresentazioni programmatiche di oggetti reali. Naturalmente, un nome da solo non fa un cane, ma OO non cerca di duplicare tutte le proprietà di ogni oggetto, solo quelle di cui abbiamo bisogno. Aggiungeremo altre proprietà in seguito.

La seconda riga è un metodo definizione (o firma del metodo ) ed è un po' più complesso, quindi, proprio come prima, lascia che lo spezzi un po' e ti mostri cosa fa ogni elemento.

[1]void [2]Speak() [3]{ Console.WriteLine("Woof"); }

Elemento [1], void , è il ritorno tipo del metodo o il tipo di output che il metodo produrrà quando viene eseguito. Nei linguaggi tipizzati staticamente come C# e Java, oltre a dichiarare i tipi di variabili, dobbiamo sempre dichiarare quale tipo di dati restituiamo dai metodi. I linguaggi digitati dinamicamente lasciano allo sviluppatore la responsabilità di determinare cosa esce da un metodo.

Nel nostro caso, almeno inizialmente, vogliamo solo che il cane dica "Woof" quando gli chiediamo di parlare, quindi non dobbiamo restituire nulla. Questo cambierà in seguito, quando tratteremo l'eredità nel prossimo articolo.

Tuttavia, anche se non vogliamo restituire alcun valore specifico, dobbiamo comunque essere espliciti al riguardo nel programma. Per fare ciò, possiamo dichiarare che il metodo restituisce un void value, che in C# e linguaggi simili significa che non stiamo restituendo nulla.

Elemento [2], Speak() , è il nome del metodo ed è ciò che usiamo per chiamare o eseguire il metodo. Nota che i metodi, come le proprietà, appartengono all'oggetto.

Elemento [3], il blocco di codice , è il codice che il programma eseguirà quando chiamiamo il metodo. Potresti anche vedere questo tipo di blocco di codice chiamato anche corpo del metodo . In questo momento, all'interno di questo blocco di codice, diremo alla console di scrivere una riga contenente "Woof".
.

Rendere pubblico il tuo metodo

Ora che abbiamo un metodo, possiamo chiamarlo o eseguirlo dal nostro programma e far abbaiare il cane. C'è un problema, tuttavia, che mi offre una grande opportunità per rivedere un altro dei concetti chiave dell'orientamento agli oggetti.

Normalmente, per accedere alle proprietà e ai metodi di un oggetto, devi prima scrivere il nome della variabile che contiene il tuo oggetto e poi il nome della tua proprietà o metodo. Ad esempio, per ottenere il valore del Name string, potresti scrivere:

string dogName = myDog.Name;

Per eseguire il metodo Speak(), puoi quindi scrivere:

myDog.Speak();

Tuttavia, se lo fai in Program.cs, riceverai un messaggio di errore come mostrato nella Figura 4.

Figura 4:Errore del livello di protezione

L'errore, che indica "'PettingZoo.Dog.Speak()' è inaccessibile a causa del suo livello di protezione" si verifica a causa di un concetto chiave in OO chiamato astrazione .

In breve, l'astrazione toglie i dettagli di come funziona qualcosa quando non abbiamo bisogno di conoscere quei dettagli. Nel nostro programma, abbiamo solo bisogno di sapere che il cane può parlare, ma non ci interessa davvero come lo fa.

L'astrazione consente invece al progettista della classe di creare punti di accesso nella classe attraverso i quali possono lavorare con gli oggetti. Molte lingue consentono questo accesso tramite modificatori di accesso .

C#, per impostazione predefinita, nasconde proprietà e metodi dall'esterno della classe. Tuttavia, la politica su questo tipo di separazione differisce in altre lingue e alcune lingue come JavaScript non offrono nemmeno questo livello di protezione.

Tuttavia, il principio rimane che tu rendi pubblico ciò che vuoi che tutti usino e nascondi il resto. La parte che rende pubblica, almeno in C#, significa semplicemente aggiungere la parola chiave public davanti alle proprietà e ai metodi a cui vuoi che qualcuno acceda. Quindi, se aggiorni il Dog classe per aggiungere public davanti a void Speak() linea in Animals.cs, le onde rosse scompaiono in Program.cs, come mostrato nella Figura 5.

Figura 5:Dichiarazione del metodo pubblico

Come bonus aggiuntivo, quando rendi pubblico il tuo metodo, Visual Studio aggiungerà il metodo alle opzioni disponibili tramite il sistema di completamento automatico di IntelliSense. Quando digiti myDog e premi il punto, ottieni un elenco di tutte le proprietà e i metodi pubblici di quell'oggetto, come mostrato nella Figura 6.

Figura 6:completamento automatico di Visual Studio Intellisense con il nostro nuovo metodo pubblico

Altri editor di codice hanno sistemi di completamento automatico simili. Questi completamenti automatici sono uno dei principali vantaggi di questi editor per i programmatori:imparerai ad amare queste funzionalità man mano che evolvi come programmatore!

.
Ora che abbiamo corretto tutti gli errori, dovremmo essere in grado di eseguire il nostro programma e vedere che il cane abbaia. Puoi inserire un punto di interruzione nel tuo Program.cs facendo clic sul margine sinistro o posizionando il cursore sulla parentesi dopo myDog.Speak() e premendo F9. Quindi, premi F5 per eseguire il programma. Dovresti vedere la console pop-up e dovrebbe apparire l'output del tuo cane che abbaia, come mostrato nella Figura 7.

Figura 7:Il nostro cane parla!

Naturalmente, ora possiamo creare una cucciolata di cani creando più variabili e istanziando oggetti al loro interno. Puoi provare qualcosa come la Figura 8, ad esempio:

Figura 8:due cani che parlano

Hai un risultato simile? Ottimo, pacca sulla spalla, ma solo una volta, perché abbiamo ancora molto lavoro da fare. Dopotutto, abbiamo promesso che l'orientamento agli oggetti ci consente di creare oggetti unici e tutto ciò che abbiamo fatto è creare due "cani" identici. Successivamente, ti mostreremo come utilizzare i costruttori per creare oggetti separati e unici.
.
.


Linux
  1. Come programmare con Bash:sintassi e strumenti

  2. Flatpak su Linux:cos'è e come installare app con esso

  3. Come configurare LogAnalyzer con Rsyslog e MySQL

  4. arp richiesta e risposta utilizzando la programmazione c socket

  5. Rimozione di file con rm utilizzando find e xargs

Procedura:Programmazione orientata agli oggetti - Costruttori ed ereditarietà

Come distribuire un'applicazione PHP con Nginx e MySQL utilizzando Docker e Docker Compose

Utilizzo di Tailscale su Windows per una rete più semplice con WSL2 e Visual Studio Code

Come installare e configurare WordPress con Ansible

Come gestire LinkageErrors in Java?

Creazione di classi e oggetti utilizzando lo scripting bash