Tutorial di programmazione - pagina 2

 

Programmazione orientata agli oggetti in 7 minuti | Mosh



Programmazione orientata agli oggetti in 7 minuti | Mosh

La programmazione orientata agli oggetti (OOP) ha rivoluzionato il modo in cui affrontiamo lo sviluppo del software introducendo quattro concetti fondamentali: incapsulamento, astrazione, ereditarietà e polimorfismo. Questi concetti forniscono una struttura potente e organizzata per la progettazione e l'implementazione di sistemi complessi.

L'incapsulamento è la pratica di raggruppare variabili e funzioni correlate in un'unità chiamata oggetto. Incapsulando i dati ei metodi che operano su tali dati all'interno di un oggetto, creiamo un'entità autonoma con confini ben definiti. Ad esempio, un oggetto auto può avere proprietà come marca, modello e colore, oltre a metodi come avvio, arresto e spostamento. Questo incapsulamento ci consente di manipolare e interagire con l'oggetto auto come una singola entità, nascondendo i dettagli interni di implementazione dal mondo esterno. L'incapsulamento non solo migliora l'organizzazione del codice, ma migliora anche la riusabilità e la manutenibilità del codice.

L'astrazione è il processo che nasconde dettagli di implementazione complessi ed espone solo le caratteristiche o le interfacce essenziali. Ci consente di creare rappresentazioni semplificate di oggetti o concetti del mondo reale. Proprio come un lettore DVD astrae la sua intricata logica interna dietro alcuni pulsanti, gli oggetti in OOP possono nascondere i loro meccanismi interni fornendo un'interfaccia chiara e concisa. Astraendo la complessità, possiamo ridurre il carico cognitivo e rendere il nostro codice più comprensibile. Inoltre, l'astrazione funge da scudo protettivo, isolando l'impatto dei cambiamenti all'interno di un oggetto e prevenendo conseguenze indesiderate su altre parti della base di codice.

L'ereditarietà è un meccanismo che consente agli oggetti di ereditare proprietà e comportamenti da altri oggetti. Con l'ereditarietà, possiamo creare una gerarchia di oggetti, dove oggetti più specializzati ereditano caratteristiche da oggetti più generalizzati. Questa gerarchia promuove il riutilizzo del codice, poiché attributi e metodi comuni possono essere definiti in un oggetto di base ed ereditati dalle sue sottoclassi. Ad esempio, nel caso di elementi HTML, come caselle di testo, elenchi a discesa e caselle di controllo, condividono tutti proprietà comuni come l'HTML nascosto e interno, nonché metodi come clic e messa a fuoco. Invece di duplicare queste proprietà e metodi in ogni elemento HTML, possiamo definirli una volta in un oggetto generico chiamato elemento HTML e far ereditare gli elementi specifici da esso. L'ereditarietà elimina la ridondanza, migliora la manutenibilità del codice e consente architetture di codice flessibili ed estendibili.

Il polimorfismo, derivato dalle parole greche "poly" (molti) e "morph" (forma), si riferisce alla capacità degli oggetti di assumere molteplici forme o comportamenti. In OOP, il polimorfismo consente di trattare oggetti di tipi diversi come oggetti di un tipo comune. Questo concetto si ottiene attraverso l'override del metodo e l'overload del metodo. L'override del metodo consente a una sottoclasse di fornire la propria implementazione di un metodo ereditato dalla sua superclasse. Ad esempio, potrebbe essere necessario eseguire il rendering di diversi elementi HTML su una pagina, ma ogni elemento ha il suo comportamento di rendering unico. Implementando un metodo render in ogni oggetto, possiamo ottenere il polimorfismo e semplificare il codice, eliminando lunghe istruzioni if-else o switch-case. L'overloading dei metodi, d'altra parte, consente a più metodi con lo stesso nome ma elenchi di parametri diversi di coesistere all'interno di una classe. Il polimorfismo consente la flessibilità del codice, migliora la leggibilità del codice e promuove il principio della "programmazione su un'interfaccia" piuttosto che su un'implementazione specifica.

Sfruttando l'incapsulamento, l'astrazione, l'ereditarietà e il polimorfismo, la programmazione orientata agli oggetti fornisce un approccio strutturato allo sviluppo del software. Offre numerosi vantaggi come l'organizzazione del codice, la riusabilità, la manutenibilità, la modularità e l'estensibilità. La comprensione e l'applicazione efficace di questi concetti fondamentali consente agli sviluppatori di creare sistemi complessi flessibili, scalabili e più facili da comprendere e mantenere nel tempo.

Object-oriented Programming in 7 minutes | Mosh
Object-oriented Programming in 7 minutes | Mosh
  • 2018.03.29
  • www.youtube.com
Get the COMPLETE COURSE: http://bit.ly/2keDCna4 pillars of object-oriented programming: encapsulation, abstraction, inheritance and polymorphism. Subscribe f...
 

Introduzione alla programmazione orientata agli oggetti - Corso intensivo


Introduzione alla programmazione orientata agli oggetti - Corso intensivo

Benvenuto in un'introduzione alla programmazione orientata agli oggetti. In questo corso esploreremo il concetto di programmazione orientata agli oggetti e i suoi quattro principi fondamentali. Si presuppone una conoscenza di programmazione precedente, ma se sei nuovo nella programmazione, ti consigliamo di guardare il nostro video di introduzione alla programmazione, che è collegato nella descrizione.

La programmazione orientata agli oggetti ci consente di raggruppare insieme variabili di tipo simile, semplificando la gestione di programmi complessi. In passato, tipi di dati primitivi come byte, int, float, double, boolean e char venivano usati per memorizzare singoli valori semplici. Tuttavia, man mano che i programmi diventavano più complessi, i programmatori avevano bisogno di un modo per raggruppare insieme le variabili correlate.

Ciò ha portato allo sviluppo di strutture in C, che hanno permesso di raggruppare dati di diverso tipo. Le strutture rappresentavano un miglioramento rispetto agli array, poiché consentivano l'archiviazione di dati diversi. Tuttavia, le strutture non avevano la capacità di definire funzioni al loro interno.

Con l'avvento della programmazione orientata agli oggetti, sono stati introdotti gli oggetti. Un oggetto è un'istanza di una classe, che funge da modello per gli oggetti. Gli oggetti possono memorizzare dati e definire funzioni. La classe definisce gli attributi e i comportamenti comuni degli oggetti, mentre gli oggetti rappresentano istanze specifiche con i propri dati univoci.

L'incapsulamento è uno dei principi fondamentali della programmazione orientata agli oggetti. Si tratta di raggruppare dati e metodi all'interno di una classe e nasconderli dall'accesso esterno. Altre classi possono interagire con gli attributi di un oggetto solo attraverso i metodi della classe, come i metodi getter e setter. L'incapsulamento aiuta a mantenere il controllo dei dati e riduce la complessità del programma impedendo l'accesso diretto agli attributi interni.

L'astrazione è un altro principio che si concentra sul mostrare dettagli essenziali nascondendo complessità non necessarie. In programmazione, ciò significa definire interfacce per classi che consentano la comunicazione tra diverse sezioni di codice. L'esatta implementazione dei metodi è nascosta all'interno della classe e le classi esterne interagiscono solo con l'interfaccia definita. Questo approccio consente la programmazione modulare e facilita la collaborazione tra più programmatori.

Nelle prossime sezioni discuteremo i rimanenti principi della programmazione orientata agli oggetti: ereditarietà e polimorfismo. Questi principi migliorano ulteriormente la flessibilità e la riusabilità del codice nella programmazione orientata agli oggetti.

Questo è tutto per l'introduzione alla programmazione orientata agli oggetti. Passiamo alla sezione successiva ed esploriamo l'incapsulamento in modo più dettagliato.

  • 00:00:00 In questa lezione esploreremo cos'è la programmazione orientata agli oggetti e come funziona. Discuteremo di come funzionano i tipi di dati primitivi come byte, int, float, double e booleani e di come le strutture possono aiutare a organizzare e archiviare i dati in modo più efficiente. Esploreremo anche come vengono creati gli oggetti e come si relazionano tra loro.

  • 00:05:00 La programmazione orientata agli oggetti fornisce un modo per raggruppare dati e funzioni correlati, consentendo una programmazione complessa senza dover codificare tutto separatamente. In questo corso accelerato, esamineremo il primo dei quattro principi fondamentali dell'OOP: l'incapsulamento. Vedremo come viene utilizzato nel contesto dell'esempio di scacchi della sezione precedente e come semplifica il monitoraggio e la gestione degli attributi correlati.

  • 00:10:00 L'astrazione è l'idea di nascondere i dettagli essenziali agli utenti di una classe, mentre l'incapsulamento è la pratica di nascondere i dati ad altre classi. Questi concetti sono importanti quando si lavora su programmi grandi e complessi, poiché può essere difficile concentrarsi sul quadro generale durante la programmazione. Questa sezione discuterà il quarto principio della programmazione orientata agli oggetti, l'astrazione.

  • 00:15:00 Nella programmazione orientata agli oggetti, un'interfaccia è un insieme predeterminato di metodi che due classi possono utilizzare per comunicare tra loro. Ciò impedisce che diverse parti del programma vengano completamente accoppiate insieme e aiuta a prevenire errori nella comunicazione. l'ereditarietà è il principio che consente a una classe di derivare altre classi da essa e in questo video vedremo un esempio.

  • 00:20:00 In questo corso intensivo sulla programmazione orientata agli oggetti, discutiamo i tre principali modificatori di accesso: pubblico, privato e protetto. Discutiamo anche di polimorfismo, che descrive metodi che possono assumere molte forme. Infine, discutiamo il principio di ereditarietà, che descrive come le classi possono essere correlate tra loro.

  • 00:25:00 Il polimorfismo è la capacità di un metodo di assumere forme diverse a seconda della gerarchia di classi da cui viene richiamato. Funziona sia dinamicamente che staticamente. L'overloading consente ai metodi con lo stesso nome di avere effetti diversi, ma è potenzialmente complicato da implementare.

  • 00:30:00 Questo video introduce le basi della programmazione orientata agli oggetti (OOP). Se sei interessato a saperne di più su OOP, assicurati di dare un'occhiata agli altri video della serie Crash Course.
Intro to Object Oriented Programming - Crash Course
Intro to Object Oriented Programming - Crash Course
  • 2020.09.30
  • www.youtube.com
Learn the basics of object-oriented programming all in one video.✏️ Course created by Steven from NullPointer Exception. Check out their channel: https://www...
 

C++ OOP - Introduzione a classi e oggetti per principianti



C++ OOP - Introduzione a classi e oggetti per principianti

Benvenuti nel mio canale, tutti! Sono Saldina, e creo video legati all'informatica e alla programmazione. Se sei interessato a questi argomenti, considera di iscriverti al mio canale e dare un pollice in su a questo video.

In questo video, voglio approfondire il mondo della programmazione orientata agli oggetti (OOP). Quindi, cos'è esattamente la programmazione orientata agli oggetti? OOP ci consente di rappresentare oggetti della vita reale nella programmazione, completi dei loro attributi e comportamenti.

Due concetti fondamentali in OOP sono le classi e gli oggetti. Capiamo la differenza tra i due. Una classe funge da modello o modello, definendo la struttura e il comportamento di un oggetto. D'altra parte, un oggetto è un'istanza di una classe. Per illustrare questo, si consideri una classe che rappresenta la frutta e gli oggetti di quella classe potrebbero essere una mela, una banana o una pesca. Allo stesso modo, una classe che rappresenta le auto avrebbe oggetti come Volvo, Ford o BMW. Ogni classe ha attributi (proprietà) come nome, prezzo, velocità massima e colore, oltre a comportamenti (metodi) come guidare, frenare e cambiare colore.

Ora, creiamo una classe di esempio chiamata "YouTubeChannel". Per creare una classe, usiamo la parola chiave "class" seguita dal nome della classe tra parentesi graffe. Abbiamo anche bisogno di rendere i membri della classe accessibili al di fuori della classe usando il modificatore di accesso "public". Nella nostra classe YouTubeChannel, definiremo attributi come il nome del canale, il nome del proprietario, il numero di iscritti e un elenco di titoli video pubblicati. Per rappresentare questi attributi, assegniamo loro dei valori. Creiamo un oggetto della classe YouTubeChannel e accediamo alle sue proprietà utilizzando la notazione punto. Ad esempio, possiamo assegnare il nome del canale YouTube come "CodeBeauty" e il nome del proprietario come "Saldina".

Possiamo anche impostare il conteggio degli iscritti a 1800 e aggiungere all'elenco tre titoli di video pubblicati. Per visualizzare le informazioni memorizzate in queste proprietà, usiamo "cout" per stamparle. Per l'elenco dei titoli dei video pubblicati, che è una raccolta, possiamo scorrere su di esso utilizzando un ciclo e stampare ogni titolo del video. Eseguendo il programma, possiamo vedere l'output che mostra i dettagli del canale YouTube: il nome del canale, il nome del proprietario, il numero di iscritti e l'elenco dei titoli dei video pubblicati.

Nei video futuri, tratteremo argomenti come costruttori e metodi di classe, che forniscono approcci più semplificati per lavorare con classi e oggetti.

Spero che questo video ti sia piaciuto! Se ti è stato utile, metti mi piace e considera di iscriverti al mio canale facendo clic sull'icona a forma di campana. Resta sintonizzato per contenuti più entusiasmanti. Ci vediamo nel prossimo video. Ciao!

C++ OOP - Introduction to classes and objects for beginners
C++ OOP - Introduction to classes and objects for beginners
  • 2020.08.02
  • www.youtube.com
Object-oriented programming is a programming paradigm that is based on the concept of objects from the real world, and it is used to represent those real wor...
 

C++ OOP (2020) - Cosa sono i costruttori e i metodi di classe? Come usarli?


C++ OOP (2020) - Cosa sono i costruttori e i metodi di classe? Come usarli?

Ciao a tutti, benvenuti nel mio canale! Sono Saldina, e su questo canale creo video legati alla programmazione. Se questo ti interessa, considera di iscriverti e dare un pollice in su a questo video. In questo video, voglio parlare di costruttori e metodi di classe.

In un tutorial precedente, abbiamo scritto del codice per una classe chiamata YouTubeChannel. Ha quattro proprietà pubbliche: nome, nome del proprietario, numero di iscritti e un elenco di titoli di video pubblicati. Abbiamo creato un oggetto di quella classe e assegnato dei valori alle sue proprietà. Ora, affrontiamo un problema con questo approccio. Se vogliamo creare un altro oggetto canale YouTube, dovremmo copiare e incollare il codice e apportare le modifiche di conseguenza. Ciò viola il principio "Non ripeterti". Per risolvere questo problema, possiamo usare costruttori e metodi di classe.

Un costruttore è un metodo speciale che viene richiamato quando viene creato un oggetto. Ha lo stesso nome della classe e non ha un tipo restituito. Creiamo un costruttore per la classe YouTubeChannel. Riceverà due parametri: nome e nome del proprietario. All'interno del costruttore, assegneremo questi parametri alle proprietà corrispondenti. Dopo aver creato il costruttore, possiamo usarlo per creare oggetti passando i valori richiesti. Ciò elimina la necessità di ripetere il codice per la creazione di oggetti. Possiamo anche utilizzare i metodi di classe per evitare di ripetere il codice per la visualizzazione delle informazioni sui canali.

Creiamo un metodo di classe chiamato getInfo che scrive le informazioni sul canale. Possiamo spostare il codice per visualizzare le informazioni in questo metodo e utilizzarlo per entrambi gli oggetti. Per invocare il metodo getInfo, possiamo chiamarlo sull'oggetto usando il nome dell'oggetto seguito da un punto e dal nome del metodo. In questo modo, possiamo visualizzare le informazioni per entrambi i canali senza duplicare il codice.

Utilizzando costruttori e metodi di classe, otteniamo un codice più pulito ed efficiente. La funzione principale diventa più facile da leggere e mantenere. I costruttori gestiscono l'inizializzazione delle proprietà dell'oggetto, mentre i metodi di classe incapsulano i comportamenti comuni della classe.

Spero che tu abbia trovato utile questo video. Se ti è piaciuto, metti un pollice in su e iscriviti al mio canale. Non dimenticare di premere l'icona della campanella per rimanere aggiornato. Ci vediamo nel mio prossimo video. Ciao!

C++ OOP (2020) - What are constructors and class methods? How to use them?
C++ OOP (2020) - What are constructors and class methods? How to use them?
  • 2020.08.09
  • www.youtube.com
In this video, I'm explaining when, why, and how are constructors and class methods used.📚 Learn how to solve problems and build projects with these Free E-...
 

C++ OOP - Cos'è l'incapsulamento nella programmazione?



C++ OOP - Cos'è l'incapsulamento nella programmazione?

Ciao a tutti! Sono Saldina e benvenuto nel mio canale relativo alla programmazione. Se sei interessato alla programmazione, valuta la possibilità di iscriverti e dare un pollice in su a questo video. In questo video parleremo dell'incapsulamento.

Innanzitutto, esaminiamo rapidamente il codice dei nostri video precedenti. Abbiamo una classe YouTubeChannel con attributi pubblici: nome, nome del proprietario, numero di iscritti e un elenco di titoli di video pubblicati. Abbiamo anche un costruttore YouTubeChannel e un metodo getInfo.

Ora concentriamoci sull'incapsulamento. Il principio dell'incapsulamento afferma che le proprietà dovrebbero essere private e che i loro valori dovrebbero essere accessibili e modificati attraverso i metodi esposti dalla classe. Ciò garantisce una manipolazione dei dati controllata e corretta. Per dimostrare la necessità dell'incapsulamento, introduciamo un problema. Attualmente, possiamo assegnare direttamente un valore al conteggio degli abbonati, che non è il modo in cui gli abbonati dovrebbero aumentare o diminuire naturalmente. Invece, dovremmo fornire metodi come iscriversi e annullare l'iscrizione per controllare queste modifiche.

Per nascondere le proprietà agli utenti, le renderemo private. Modificando il loro modificatore di accesso in privato, limitiamo l'accesso diretto a queste proprietà. Tuttavia, questo genera errori in quanto i membri privati sono ora inaccessibili al di fuori della classe. Per consentire agli utenti di modificare il conteggio degli iscritti, creiamo due metodi: iscriviti e annulla l'iscrizione. Il metodo subscribe incrementa il conteggio degli abbonati, mentre il metodo unsubscribe lo decrementa. Utilizzando questi metodi, gli utenti possono interagire con la classe e seguire le regole definite dai metodi.

Abbiamo riscontrato un problema nel metodo di annullamento dell'iscrizione. Attualmente consente al conteggio di diventare negativo. Per risolvere questo problema, dobbiamo aggiungere un controllo che garantisca che il conteggio sia maggiore di zero prima di decrementarlo. Inoltre, abbiamo un'altra proprietà privata, titoli di video pubblicati, che ora è inaccessibile. Per fornire l'accesso a questa proprietà, creeremo un metodo chiamato publishVideo. Questo metodo accetta un parametro stringa (il titolo del video) e lo aggiunge all'elenco dei titoli dei video pubblicati utilizzando il metodo push_back.

Infine, abbiamo esposto metodi che consentono agli utenti di interagire con la classe e manipolare le proprietà private. Per controllare ulteriormente l'accesso alle proprietà del nome e del nome del proprietario, possiamo creare metodi getter e setter.

Per riassumere l'incapsulamento:

  • Rendi le proprietà private per limitare l'accesso diretto.
  • Fornire metodi pubblici per modificare le proprietà private.
  • Garantire una corretta manipolazione dei dati seguendo le regole definite nei metodi.

Se disponi di codice che implementa i metodi getter e setter, sentiti libero di condividerlo nella sezione dei commenti per la revisione.

Se ti è piaciuto questo video, per favore metti un pollice in su, iscriviti al mio canale e fai clic sull'icona a forma di campana per ricevere notifiche per i video futuri. Grazie per la visione e ci vediamo nel prossimo video! Ciao!

C++ OOP - What is encapsulation in programming?
C++ OOP - What is encapsulation in programming?
  • 2020.08.17
  • www.youtube.com
Encapsulation is one of the most important characteristics of Object-Oriented Programming. Encapsulation helps in data hiding and is used to prevent direct a...
 

C++ OOP - Cos'è l'ereditarietà nella programmazione?



C++ OOP - Cos'è l'ereditarietà nella programmazione?

Ciao a tutti, sono Saldina e creo video legati alla programmazione. Se ti interessa, considera di iscriverti al mio canale. Inoltre, dai un pollice in su a questo video. In questo video, voglio discutere l'incapsulamento.

Ho scritto del codice nei video precedenti di questo corso. Se non li hai visti, assicurati di controllarli. Fornirò i collegamenti nella descrizione del video. Permettetemi di esaminare rapidamente il codice per aiutarvi a capirlo. Ho creato una classe YouTubeChannel con quattro attributi pubblici: nome, nome del proprietario, numero di iscritti e un elenco di titoli di video pubblicati. Sono presenti anche il costruttore YouTubeChannel e il metodo getInfo. Puoi vedere il codice del costruttore qui.

Nella funzione principale, ho creato un oggetto della classe YouTubeChannel e assegnato valori per il nome e il nome del proprietario. Ho anche aggiunto tre video all'elenco dei video pubblicati. Infine, ho stampato le informazioni sul canale. Ora parliamo di incapsulamento. Questo principio suggerisce che queste proprietà dovrebbero essere private, non pubbliche. I dati archiviati in queste proprietà devono essere modificati solo tramite metodi che esponi all'utente. Seguendo le regole di questi metodi, l'utente può modificare i valori delle proprietà.

Consideriamo un problema per capire perché abbiamo bisogno dell'incapsulamento. Cosa succede se imposto il numero di iscritti di questo canale YouTube su un milione? Questo non dovrebbe essere permesso. Se eseguo il codice, vedrai che il canale ora ha un milione di iscritti. Tuttavia, l'acquisizione di abbonati richiede naturalmente agli utenti di invocare i metodi di iscrizione e annullamento dell'iscrizione. Utilizzando questi metodi, il conteggio degli abbonati viene aumentato o diminuito. Per nascondere queste proprietà all'utente, le rendiamo private anziché pubbliche. Ciò significa che è possibile accedervi solo all'interno della classe stessa. Per consentire agli utenti di modificare il conteggio degli abbonati, creiamo due metodi: iscriviti e annulla l'iscrizione. Il metodo subscribe incrementa il conteggio degli abbonati, mentre il metodo unsubscribe lo decrementa.

Per aumentare o diminuire gli abbonati, ora dobbiamo invocare questi metodi. Ad esempio, youtubeChannel.subscribe() viene utilizzato tre volte per simulare tre iscrizioni. Se invoco youtubeChannel.unsubscribe() e poi chiamo getInfo, vedrai che ci sono due iscritti. Riscontriamo anche un errore in fase di compilazione perché la proprietà dei titoli video pubblicati è ora privata e inaccessibile. Per risolvere questo problema, creiamo un metodo chiamato publishVideo, che aggiunge un titolo video all'elenco dei titoli video pubblicati. Il metodo accetta un parametro title, consentendo all'utente di specificare il titolo del video. Invocando youtubeChannel.publishVideo("Title"), aggiungiamo i video all'elenco.

In sintesi, l'incapsulamento comporta la creazione di proprietà private e la fornitura di metodi pubblici per modificarle. I metodi getter e setter possono essere utilizzati per accedere e modificare proprietà specifiche. Sentiti libero di condividere la tua implementazione dei metodi getter e setter nei commenti per la revisione.

Se hai trovato utile questo video, metti un pollice in su, iscriviti al mio canale e fai clic sull'icona della campana. Resta sintonizzato per altri video. Arrivederci alla prossima! Ciao!

C++ OOP - What is inheritance in programming?
C++ OOP - What is inheritance in programming?
  • 2020.08.20
  • www.youtube.com
Inheritance is one of the most important characteristics of Object-Oriented Programming. Inheritance is a process in which one class (aka derived class/child...
 

C++ OOP - Cos'è il polimorfismo nella programmazione? (semplice esempio)



C++ OOP - Cos'è il polimorfismo nella programmazione? (semplice esempio)

Ciao a tutti, benvenuti nel mio canale. Mi chiamo Saldina e creo video legati all'informatica e alla programmazione. Se ti interessa, considera di iscriverti al mio canale e dare un pollice in su a questo video. In questo particolare video, voglio parlare del polimorfismo.

Il polimorfismo si riferisce alla capacità di un oggetto di avere più forme. Ciò significa che puoi avere due o più oggetti che ereditano dalla stessa classe base. Questi oggetti possono avere un metodo con lo stesso nome ma implementazioni diverse, determinando comportamenti diversi. Diamo un'occhiata al codice che abbiamo scritto nei miei corsi precedenti. Ho creato una classe chiamata "YouTubeChannel" con proprietà private come nome, numero di iscritti e titoli dei video pubblicati. Ha anche una proprietà protetta chiamata "nome del proprietario". Inoltre, ci sono metodi pubblici, un costruttore, un metodo "getInfo" e metodi "subscribe/unsubscribe".

Successivamente, abbiamo un tipo specifico di canale YouTube chiamato "CookingYouTubeChannel", che eredita dalla classe base. Ha il proprio costruttore e un metodo aggiuntivo chiamato "pratica", specifico per i canali di cottura. Ora voglio creare un'altra classe derivata chiamata "SingersYouTubeChannel" per un canale YouTube sul canto. Questa classe ha anche un metodo "pratico", ma l'implementazione è diversa dal canale di cottura. I cantanti si esercitavano a cantare, imparare nuove canzoni e persino ballare.

Per dimostrare il polimorfismo, creo istanze sia dei canali YouTube della cucina che dei cantanti. Quindi, invoco il metodo "pratica" su ciascun canale. Puoi vedere che le rispettive implementazioni vengono chiamate in base al tipo di canale. Inoltre, introduco una proprietà "contentQuality" per tenere traccia della qualità del contenuto. Ogni volta che viene invocato il metodo "pratica", la qualità del contenuto aumenta. Aggiungo anche un metodo chiamato "checkAnalytics" che controlla la valutazione della qualità del contenuto e genera un messaggio in base alla valutazione.

Per mostrare ulteriormente il polimorfismo, utilizzo i puntatori alla classe base per puntare agli oggetti delle classi derivate. A questi puntatori assegno gli indirizzi dei canali YouTube di cucina e cantanti. Utilizzando questi puntatori, invoco il metodo "checkAnalytics" per ciascun canale, dimostrando che il polimorfismo ci consente di utilizzare i puntatori della classe base per chiamare i metodi della classe derivata.

Spero che abbiate trovato piacevole questo video. Se lo hai fatto, per favore metti un pollice in su e considera di iscriverti al mio canale. Non dimenticare di fare clic sull'icona della campana per ricevere notifiche per i video futuri. Grazie e ci vediamo nel mio prossimo video. Ciao!

C++ OOP - What is polymorphism in programming? (simple example)
C++ OOP - What is polymorphism in programming? (simple example)
  • 2020.09.01
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Spiegazione della relazione tra funzioni virtuali, funzioni virtuali pure e classi astratte in OOP



Spiegazione della relazione tra funzioni virtuali, funzioni virtuali pure e classi astratte in OOP

In questo video spiegherò lo scopo e la relazione tra funzioni virtuali, funzioni virtuali pure e classi astratte. Sono entusiasta di continuare questa playlist di programmazione orientata agli oggetti. Se hai domande o argomenti che vorresti vedere nei video futuri, lascia un commento qui sotto. Ora, tuffiamoci nelle funzioni virtuali.

Una funzione virtuale è una funzione definita in una classe base e può essere ridefinita in una classe derivata. Lo scopo principale delle funzioni virtuali è abilitare il polimorfismo di runtime. Quando si richiama una funzione virtuale utilizzando un puntatore o un riferimento alla classe base, verrà eseguita la versione più derivata di quella funzione. Se la classe derivata ha una propria implementazione, quella versione verrà eseguita. In caso contrario, verrà utilizzata l'implementazione nella classe base.

Diamo un'occhiata a un esempio in Visual Studio. Creeremo una classe "Instrument" con una funzione virtuale chiamata "makeSound" che restituisce un messaggio. Quindi, creeremo una classe derivata chiamata "Accordion" che sovrascrive la funzione "makeSound" con la propria implementazione. Utilizzando un puntatore alla classe base per richiamare la funzione, possiamo vedere che viene eseguita la versione derivata. L'aggiunta della parola chiave "virtual" alla funzione della classe base assicura che venga chiamata la versione più derivata.

Successivamente, discutiamo di funzioni virtuali pure e classi astratte. Una funzione virtuale pura è una funzione virtuale senza implementazione nella classe base. Forza le classi derivate a fornire la propria implementazione. Impostando una funzione virtuale su "uguale a zero", creiamo una funzione virtuale pura. Questo rende la classe base una classe astratta, che non può essere istanziata. Le classi derivate devono implementare la pura funzione virtuale. Creeremo una classe "Piano" derivata dalla classe "Instrument". Se proviamo a creare un oggetto di tipo "Piano" senza implementare la pura funzione virtuale, si verificherà un errore. Tuttavia, una volta implementata la funzione nella classe "Piano", possiamo creare correttamente un oggetto e richiamare la funzione.

Infine, esploriamo il comportamento polimorfico delle funzioni virtuali. Abbiamo due puntatori di strumenti, uno che punta a un oggetto "Accordion" e l'altro a un oggetto "Piano". Creando un array di puntatori di strumenti, possiamo dimostrare che l'invocazione della funzione "makeSound" utilizzando i puntatori della classe base comporta l'esecuzione delle versioni derivate della funzione.

Spero che questa spiegazione ti aiuti a comprendere meglio le funzioni virtuali, le funzioni virtuali pure e le classi astratte. Se hai ulteriori domande, fammelo sapere nei commenti qui sotto. Grazie per la visione e non dimenticare di iscriverti!

Relationship between Virtual Functions, Pure Virtual Functions and Abstract Classes in OOP explained
Relationship between Virtual Functions, Pure Virtual Functions and Abstract Classes in OOP explained
  • 2021.04.15
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Astrazione spiegata con esempi di vita reale e codice! - Corso C++ OOP



Astrazione spiegata con esempi di vita reale e codice! - Corso C++ OOP

In questo video, discuterò l'importante concetto di astrazione nella programmazione orientata agli oggetti. Spiegherò cos'è l'astrazione e dimostrerò come implementare e utilizzare l'astrazione nella programmazione C++. Ma prima di addentrarci, vorrei introdurre C++ Builder, un potente IDE che consente lo sviluppo rapido di app per più piattaforme con meno codice. Si collega perfettamente a vari database e include potenti librerie come i framework VCL e FireMonkey. Inizia gratuitamente utilizzando il link nella descrizione.

L'astrazione nella programmazione si riferisce all'atto di visualizzare informazioni importanti nascondendo dettagli complessi e non importanti. Per comprendere meglio l'astrazione, consideriamo un esempio di vita reale: una macchina da caffè. Quando si utilizza una macchina da caffè, è sufficiente sapere come inserire caffè e acqua e premere un pulsante per fare il caffè. Il processo interno della macchina è complesso, ma è astratto e nascosto dietro una semplice procedura. Questa astrazione rende facile per gli utenti utilizzare la macchina senza comprenderne il complicato funzionamento. Allo stesso modo, nella programmazione, usiamo l'astrazione per nascondere dettagli complessi e fornire un'interfaccia semplificata.

Un altro aspetto chiave dell'astrazione è che gli elementi astratti non cambiano frequentemente, o almeno non sembrano cambiare per l'utente finale. Ciò significa che è possibile modificare l'implementazione interna, purché non si modifichi l'interfaccia esposta all'utente. Ad esempio, se una nuova azienda sviluppa una macchina da caffè più efficiente, può modificare i componenti interni per ridurre il consumo di energia, preparare il caffè più velocemente e ridurre il rumore. Finché l'utente deve ancora inserire caffè e acqua e premere il pulsante, l'interfaccia rimane la stessa e l'utente non ha bisogno di imparare un nuovo modo di utilizzare la macchina. Questa standardizzazione del comportamento attraverso l'astrazione consente alle nuove aziende di basarsi sulle aspettative degli utenti esistenti.

Nella programmazione, possiamo creare livelli di astrazione per nascondere dettagli complessi e fornire un'interfaccia semplificata per altri sviluppatori. Ad esempio, se creo una classe con varie funzionalità complesse, posso fornire uno strato di astrazione che nasconde la complessità sottostante. Altri sviluppatori possono quindi utilizzare la semplice interfaccia della classe senza dover conoscere i dettagli dell'implementazione. In C++, otteniamo l'astrazione utilizzando classi astratte, che contengono almeno una funzione virtuale pura. Queste classi astratte definiscono il contratto o l'interfaccia che le altre classi devono implementare.

Creiamo una classe astratta chiamata "Smartphone" per illustrare questo. Dichiarerà una funzione pubblica chiamata "Fai un selfie", che funge da importante funzionalità che tutti gli smartphone dovrebbero avere. Rendendo questa funzione una funzione virtuale pura utilizzando la sintassi "= 0", trasformiamo la classe in una classe astratta. Non possiamo creare direttamente istanze di classi astratte, ma possiamo creare puntatori ad esse. Qualsiasi classe che voglia essere uno smartphone deve ereditare da questa classe astratta e fornire la propria implementazione della pura funzione virtuale.

Ad esempio, creiamo una classe "Android" che erediti dalla classe "Smartphone". In questa classe implementiamo la funzione "Scatta un selfie" con la complessa logica specifica dei dispositivi Android. Allo stesso modo, possiamo creare una classe "iPhone" che erediti anch'essa da "Smartphone" e fornisca la propria implementazione della funzione "Fai un selfie". Ogni classe può avere la propria implementazione univoca, ma dal punto di vista di qualcuno che utilizza lo smartphone, il processo rimane lo stesso.

L'astrazione raggiunta attraverso la classe "Smartphone" consente agli sviluppatori che lavorano su classi Android o iPhone di concentrarsi sui loro specifici dettagli di implementazione senza bisogno di conoscere la logica dell'altra classe. Devono solo aderire al contratto definito dalla classe astratta, assicurandosi che le funzionalità richieste siano implementate. Utilizzando l'astrazione, creiamo una separazione delle preoccupazioni, semplifichiamo l'utilizzo del codice e facilitiamo lo sviluppo modulare. L'astrazione ci consente di creare interfacce standardizzate e nascondere implementazioni complesse, con conseguente maggiore manutenzione.

L'astrazione ci consente di creare interfacce standardizzate e nascondere implementazioni complesse, ottenendo un codice più gestibile e flessibile. Promuove il riutilizzo del codice e lo sviluppo modulare incapsulando la funzionalità in classi astratte che possono essere estese e implementate da altre classi. Oltre alle classi astratte, il C++ fornisce anche un altro meccanismo per l'astrazione chiamato interfacce. Le interfacce sono classi puramente astratte che definiscono un contratto di metodi che devono essere implementati da qualsiasi classe che voglia aderire all'interfaccia. Ciò consente un'astrazione ancora maggiore e un accoppiamento libero tra i componenti.

Per riassumere, l'astrazione nella programmazione orientata agli oggetti è il processo che nasconde dettagli complessi e fornisce un'interfaccia semplificata. Consente agli sviluppatori di concentrarsi su implementazioni specifiche, astraendo la complessità sottostante. Le classi e le interfacce astratte sono gli strumenti principali per ottenere l'astrazione in C++. Usando l'astrazione, possiamo creare codice più modulare, riutilizzabile e gestibile.

Abstraction explained with real-life examples and code! - C++ OOP Course
Abstraction explained with real-life examples and code! - C++ OOP Course
  • 2021.04.21
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...
 

Operatore C++ Overloading da principiante ad avanzato (spiegazione approfondita)



Operatore C++ Overloading da principiante ad avanzato (spiegazione approfondita)

Ciao a tutti e benvenuti sul mio canale. Ero nel bel mezzo del mio lavoro e non avevo programmato di filmare questo video, ma dato che sto lavorando a un progetto molto interessante, ho pensato perché non mostrarvelo? Attualmente sto lavorando a un grande progetto con migliaia di file e milioni di righe di codice. Stavo per analizzare il mio codice, che di solito richiede dai 10 ai 15 minuti per essere completato. Quindi, mentre aspettiamo l'analisi, ti insegnerò il sovraccarico degli operatori.

L'analizzatore che utilizzo si chiama PDS Studio e puoi ottenerlo gratuitamente utilizzando il link nella descrizione. Ti mostrerò come utilizzo PDS Studio per trovare bug e ottimizzare il mio codice. Una volta scaricato PDS Studio, hai bisogno di un codice da analizzare. Ho la soluzione dal mio lavoro, ma non posso mostrarti il codice a causa di un accordo di non divulgazione. Tuttavia, ti mostrerò i risultati dell'analisi più avanti nel video.

Per analizzare il codice utilizzando PDS Studio, è necessario fare clic sulla scheda Estensioni e selezionare PDS Studio. Quindi, scegli l'intera soluzione per l'analisi. Poiché l'analisi richiede del tempo, passerò a un progetto vuoto e nel frattempo ti insegnerò il sovraccarico dell'operatore.

L'overload degli operatori ci consente di definire come si comporta un determinato operatore con un tipo di dati specifico. Ad esempio, l'operatore più si comporta in modo diverso quando viene utilizzato con i numeri rispetto a quando viene utilizzato con un tipo di dati definito dall'utente. Possiamo creare funzioni operatore per definire questo comportamento. Spiegherò questo concetto utilizzando un esempio di aggiunta di due tipi di dati definiti dall'utente.

In C++, possiamo creare funzioni operatore usando la parola chiave "operator" seguita dall'operatore che vogliamo sovraccaricare. Ad esempio, possiamo sovraccaricare l'operatore più creando una funzione "operator+". Lo dimostrerò creando una struttura chiamata "YouTubeChannel" con due attributi: "name" e "subscribersCount". Creeremo anche un costruttore per questa struttura.

Per sovraccaricare l'operatore di inserimento (<<) per il nostro tipo YouTubeChannel, dobbiamo definire una funzione "operator<<". Questa funzione accetta due parametri: un oggetto di tipo "ostream" (ad esempio, "cout") e un oggetto di tipo "YouTubeChannel". Passiamo questi parametri per riferimento per evitare copie non necessarie.

All'interno della funzione "operator<<", utilizziamo l'oggetto "ostream" per emettere le informazioni su YouTubeChannel. In questo caso, stampiamo il nome e contiamo gli abbonati. Sovraccaricando l'operatore di inserimento, abilitiamo la stampa degli oggetti YouTubeChannel utilizzando il comando "cout".

Per utilizzare l'operatore di inserimento in overload, possiamo semplicemente scrivere "cout << youtubeChannelObject". Funziona in modo simile a come stampiamo altri tipi usando "cout". Possiamo anche invocare direttamente la funzione operator, come una normale funzione, passando l'oggetto "cout" e l'oggetto YouTubeChannel come parametri.

Tieni presente che diversi operatori hanno diversi modi di sovraccaricare. L'operatore di inserimento viene sovraccaricato utilizzando la funzione "operator<<", ma altri operatori come più, meno, maggiore di, minore di, uguale a, ecc., hanno le proprie funzioni di operatore specifiche.

Questo è tutto per questo video. Spero che tu abbia trovato utile questa introduzione all'overload degli operatori. Controllare la descrizione per un elenco di tutti gli operatori che possono essere sovraccaricati in C++. Una volta completata l'analisi, vi mostrerò i risultati. Se hai domande, non esitare a chiedere nei commenti. Grazie per aver guardato!

C++ Operator Overloading beginner to advanced (in-depth explanation)
C++ Operator Overloading beginner to advanced (in-depth explanation)
  • 2021.06.30
  • www.youtube.com
📚 Learn how to solve problems and build projects with these Free E-Books ⬇️C++ Lambdas e-book - free download here: https://bit.ly/freeCppE-BookEntire Objec...