mercoledì 7 agosto 2024

Tutorial TypeScript : Parte settima - le classi utilizzo avanzato

Si riporta l'articolo scritto per il sito https://www.iprogrammatori.it/articoli/javascript/art_parte-settima-le-classi-utilizzo-avanzato_1874.aspx


In questo nuovo articolo riprendiamo l’argomento della precedente parte, la sesta, sull’utilizzo delle classi.
In particolare, vedremo alcuni aspetti avanzati della creazione e gestione delle classi, che estende la conoscenza base visto nel precedente articolo.
Riprendiamo il progetto precedente, in modo che utilizziamo la classe già realizzata in precedenza.


Stesura del codice

Le classi possono a loro volta ereditare da altra classe, questa tecnica si usa nella programmazione orientata ad oggetti, e permette di estendere, ossia ampliare, una classe con le proprietà, metodi ed eventi di altra classe.
Questa tecnica può tornare utile quando abbiamo l’esigenza di creare n classi ed in molte o tutte dobbiamo avere delle stesse proprietà o metodi. 
Vediamo di seguito un esempio.


Eredità estendere una classe

Nel linguaggio di programmazione TypeScript, per estendere una classe o meglio ereditare da un’altra dobbiamo utilizzare la parola chiave “extends”, seguito dalla classe che si vuole ereditare.
Si crea una classe denominata “Lavoro” con una proprietà di tipo “string” denominata “descrizioneLavoro”, di seguito si riporta il frammento di codice delle suddette operazioni.



TypeScript

class Lavoro {

 

  public Descrizione: string;

 

   constructor(descrizioneLavoro: string)

   {

 

     this.Descrizione = descrizioneLavoro;

 

   }

 

 }

 

Terminata la creazione di una classe da ereditare, andiamo nella classe creata nell’articolo precedente, quella denominata “anagrafica” ed estendiamo da questa appena creata.


TypeScript:

export class Anagrafica extends Lavoro {

 

Se la nuova classe si trova nello stesso file della classe “Anagrafica” ma nella parte inferiore della dichiarazione di quest’ultima, l’ambiente di sviluppo “Visual Studio Code”, visualizzerà un messaggio di errore in cui dev’essere dichiara prima, il tutto come mostrato in figura 1.


Figura 1 – Il messaggio di errore

Spostiamo la classe in alto, in modo che non abbiamo più l’errore.

La classe deve avere nel costruttore la parola chiave “super” ed indicare la proprietà della classe su cui si vuole ereditare.
Di seguito il frammento di codice completo della classe “Anagrafica”.


TypeScript:

export class Anagrafica extends Lavoro {

  public Nome: string;

  public Cognome: string;

  public totaleCaratteri: number = 0;

 

  //Costruttore

  public constructor(nome: string, cognome: string, DescrizioneLav: string ) {

    super( DescrizioneLav);

    this.Nome = nome;

    this.Cognome = cognome;

 

  }

 

  public getNominativo(): string {

    return 'Il nominativo è è: ' + this.Nome + '  ' + this.Cognome;

 

  }

 

  //Metodo che non restituisce nessun valore

  public setTotaleCaratteri(testo: string): void {

    console.log(testo.length);

 

  }



}

 


La parola Super con la proprietà da passare, e perché nella classe “Lavoro” abbiamo impostato nel costruttore l’obbligo di passare un parametro.
Di seguito si riporta il frammento di codice del relativo utilizzo.


TypeScript:

ngOnInit(): void {

    let ana: Anagrafica = new Anagrafica('Emanuele', 'Mattei', 'Impiegato');

    alert(ana.Nome + ' ' + ana.Cognome + ' ' + ana.Descrizione);

  }

 

Se la classe Lavoro non aveva il parametro del costruttore, non c’era bisogno di mettere nella parola chiave “super” il valore.
Di seguito si riporta la dichiarazione della classe “Lavoro” senza parametri per il costruttore.



TypeScript

class Lavoro {

 

  public Descrizione: string = '';

 

   constructor()

   {



   }

 

 }

 

Di seguito si riporta la dichiarazione della classe “Anagrafica” che eredita da “Lavoro” e che non imposta nessun lavoro nella parola chiave “super”.


TypeScript

 

export class Anagrafica extends Lavoro {

  public Nome: string;

  public Cognome: string;

  public totaleCaratteri: number = 0;

 

  //Costruttore

  public constructor(nome: string, cognome: string, DescrizioneLav: string ) {

    super();

    this.Nome = nome;

    this.Cognome = cognome;

    this.Descrizione = DescrizioneLav;

 

  }

 

  public getNominativo(): string {

    return 'Il nominativo è è: ' + this.Nome + '  ' + this.Cognome;

 

  }

 

  //Metodo che non restituisce nessun valore

  public setTotaleCaratteri(testo: string): void {

    console.log(testo.length);

 

  }



}

 

Di seguito il relativo utilizzo.

TypeScript

ngOnInit(): void {

 

    let ana: Anagrafica = new Anagrafica('Emanuele', 'Mattei', 'Impiegato');

    alert(ana.Nome + ' ' + ana.Cognome + ' ' + ana.Descrizione);

 

  }

 

 

Le interfacce

Altro aspetto del linguaggio TypeScript, è quello di realizzare delle interfacce, che anch’esse possono avere proprietà e metodi, ma solo come dichiarazione in quanto la loro implementazione avviene nella classe in cui viene eredita.
Nelle interfacce troviamo la firma, la dichiarazione che poi implementeremo nella classe.
Di seguito si riporta il frammento di codice di un’interfaccia composta da una proprietà ed un metodo.


TypeScript.

 interface Persona{

  nucleoFamigliare: number;

 

  ottieniDatoCompleto():string;



 }

 

Tramite la classe “Anagrafica” dobbiamo ereditare l’interfaccia ed utilizzare la proprietà e metodo dell’interfaccia.
Di seguito si riporta il frammento di codice delle suddette operazioni della classe “Anagrafica”.


TypeScript

export class Anagrafica   implements  Persona {

  public Nome: string;

  public Cognome: string;

  public totaleCaratteri: number = 0;

 public nucleoFamigliare: number;

 

 ottieniDatoCompleto(): string {

 

  return this.Nome + " " + this.Cognome + this.nucleoFamigliare;

 

 }

 

  //Costruttore

  public constructor(nome: string, cognome: string,  NucleoFamiglirare: number ) {

 

    this.Nome = nome;

    this.Cognome = cognome;

    this.nucleoFamigliare = NucleoFamiglirare;

 

  }

 

  public getNominativo(): string {

    return 'Il nominativo è è: ' + this.Nome + '  ' + this.Cognome + ' ' +  this.nucleoFamigliare;

 

  }

 

  //Metodo che non restituisce nessun valore

  public setTotaleCaratteri(testo: string): void {

    console.log(testo.length);

 

  }



}

 

Anche per le interfacce, la dichiarazione qualora avvenga nello stesso file dove si trova la classe che dovrà implementarle, si devono trovare in alto alla classe, altrimenti genera un errore.
Di seguito si riporta il frammento di codice del relativo utilizzo.

TypeScript:

ngOnInit(): void {

  

    let ana: Anagrafica = new Anagrafica('Emanuele', 'Mattei', 3);

    alert(ana.getNominativo());

 

  }

 

 

Override del metodo

Con la parola chiave Override possiamo riscrivere le azioni che deve fare un metodo con lo stesso nome.
Supponiamo di avere un metodo che deve restituire la descrizione della mansione del lavoro, il nome del metodo sarà uguale per le due classi, di cui una sarà ereditata.
Una classe si chiamerà lavoro, ed avrà il metodo “getMansione” ed un’altra classe, che ereditarietà dalla classe “Lavoro” avrà anch’esse il metodo “getMansione” ma di tipo Ovveride.
Di seguito si riporta il frammento di codice della classe “Lavoro”.




TypeScript:

export class Lavoro {

 

  public Descrizione: string = '';

 

  constructor() {

  }

 

  getMansione(): string {

 

    return this.Descrizione;

 

  }

}

 

Di seguito si riporta il frammento di codice della dichiarazione della classe di “Anagrafica” che eredita dalla classe lavoro.


TypeScript:

 

export class Anagrafica   extends  Lavoro {

  public Nome: string;

  public Cognome: string;

  public totaleCaratteri: number = 0;



 override getMansione(): string {

 

  return "Il lavoro è: " + this.Descrizione;

 

 }

 

  //Costruttore

  public constructor(nome: string, cognome: string, descrizioneLavoro: string ) {

    super()

    this.Nome = nome;

    this.Cognome = cognome;

    this.Descrizione = descrizioneLavoro;

 

  }

 

}

 







Come si è visto dal precedente codice, il metodo “getMansione” è preceduto dalla parola chiave “override”, permettendo in questo modo di avere un metodo con lo stesso nome di quello eredita le cui azioni sono diverse.

Di seguito si riporta il frammento di codice del relativo utilizzo.





TypeScript:

  ngOnInit(): void {

 

    let lav: Lavoro = new Lavoro();

    lav.Descrizione = "Direttore";

    alert(lav.getMansione());

    let ana: Anagrafica = new Anagrafica('Emanuele', 'Mattei', "Impiegato");

    alert(ana.getMansione());

 

  }

 




Conclusioni

Si conclude con questo articolo la serie dedicata alle classi ed al tutorial di TypeScript, che aveva il compito di fornire le basi e delucidazioni al lettore che si avvicinava a questo linguaggio di programmazione.
Un linguaggio sempre più usato e che è parte della tecnologia Angular, che in questi ultimi due anni sta riscuotendo un grande interesse da parte di aziende e sviluppatori con una costante crescita.
Il tutorial ha fornito una panoramica sul linguaggio TypeScript fornendo numerosi esempi di codice per i vari temi trattati.
Il linguaggio è continuamente aggiornato da Microsoft, con nuova sintassi o parole chiavi.
Il tutorial ha fornito le basi per chi si avvicina per la prima volta a questo linguaggio per il web.

martedì 6 agosto 2024

Download gratuito programma per lo scansione e lettura file immagine NAPS2

 


Il programma Naps2, è un software multipiattaforma ed open source con sorgenti in .Net, per effettuare la scansione dei documenti, oltre a funzionalità di OCR, ossia rilevamento del testo nei file immagini.

Il software è scaricabile qui NAPS2 - Scan documents to PDF and more selezionando il sistema operativo nel quale eseguirlo. 

Dalla pagina download, qui Download - NAPS2 è possibile scaricare la versione portatile, ossia che non richiede nessuna installazione e si può utilizzare dalla propria chiavetta.

Un programma gratuito molto ben fatto.


lunedì 5 agosto 2024

'IAsyncEnumerable' non contiene una definizione di 'ToListAsync' e non è stato trovato alcun metodo di estensione accessibile 'ToListAsync'

Qualora si sta utilizzando un metodo asincrono quale ".ToListAsync()" può visualizzare il messaggio di errore "'IAsyncEnumerable<ProcessedImage>' non contiene una definizione di 'ToListAsync' e non è stato trovato alcun metodo di estensione accessibile 'ToListAsync'" questo è dovuto al fatto che nel progetto non è stato aggiunto il riferimento nuget "System.Linq.Async".
Dopo aver aggiunto tale pacchetto, l'errore non sarà più presente.


domenica 4 agosto 2024

Download gioco Illuvium Zero

 


Un gioco di strategia nel costruire città e con una grafica interessante e buona giocabilità.

Parliamo del gioco Illuvium Zero, un video gioco in lingua inglese per sistemi operativi Windows e Mac.

Per maggiori informazioni e download, visitate il seguente sito https://store.epicgames.com/it/p/illuvium-zero-ca46a6

Download gratuito icone gratuite blendicons

 



Il sito https://blendicons.com/ offre la possibilità di scaricare gratuitamente icone o meglio immagini, senza dover lasciare email e senza registrarsi. Le icone, utilizzabili gratuitamente devono riportare l'attribuzione, ossia il link al sito.

Per maggiori informazioni e download immagini visitate il sito indicato.

sabato 3 agosto 2024

Download gioco IfSunSets

 


Il gioco If Sun Sets, per sistemi operativi è un video gioco di avventura con una grafica molto accattivante e ben fatta.

Il gioco è gratuito ed in lingua inglese.

Per maggiori informazioni e download visitate il seguente sito https://store.epicgames.com/it/p/ifsunsets-aaed84

Angular Material matTooltip testo con riga a capo

Nel caso che si sta utilizzando il controllo MatTooltip di Angular Material e si vuole riportare il testo in colonnato, ossia una parola sotto l'altra, tramite impostazione di stile possiamo ottenere tale effetto.
Di seguito si riporta il frammento di codice per tale operazione in Angular e TypeScript


HTML:
 <mat-list  [matTooltip]="getElementiTooltip()" placement="bottom">
    <div>
{{ variabile }}
                                </div>
                            </mat-list>

SCSS:
::ng-deep .mat-tooltip {
    white-space: pre-line;
  }

TypeScript:
 getElementiToolTip(proposti: string[]) : string{
       let Risultato: string = "";

        Array.forEach(p=> returnRisultato += p + ' \n ' );
        return Risultato;
    }

venerdì 2 agosto 2024

download gioco LumbearJack

 


Disponibile gratuitamente e senza limitazioni il gioco di azione Lumbear Jack, che offre una grafica semplice.

Adatto a tutti, anche a  bambini

Il gioco in lingua italiano è disponibile per sistemi operativi Windows.

Fino al 8 agosto 2024 si potrà scaricare gratuitamente dopo tale data il download sarà a pagamento.

Per maggiori informazioni e download visitate il seguente sito https://store.epicgames.com/it/p/lumbearjack-b5bedf 

Angular TypeScript aprire un altro sito

Di seguito si riporta un frammento di codice nel linguaggio TypeScript, che permette tramite la classe "Window" di aprire un altro sito.

TypeScript:

    ngOnInit(): void
    {
        window.location.href = 'https://emanuelemattei.blogspot.com/';
    }

giovedì 1 agosto 2024

Download gioco Stumble upon Rumble

 



Il gioco Stumble Upon Rumble è un video game sportivo, in particolare in veste di un pugile occorre sfidare vari avversari.

Il gioco offre una grafica molto semplice, ma adatto a tutti. 

Il gioco è in lingua inglese ed è possibile utilizzarlo su sistemi operativi Windows e Mac.

Per maggiori informazioni e download visitate il seguente sito Stumble Upon Rumble | Scaricalo e gioca gratuitamente sull'Epic Games Store

TypeScript, verificare se in una string è presente una frase o carattere Angular

Nel caso che stiamo utilizzando il linguaggio di programmazione TypeScript, usato con la tecnologia Angular, ed abbiamo la necessità di sapere se una stringa contiene un determinato carattere o frase, dobbiamo utilizzare il metodo "Includes" che è il corrispondente di Contains del linguaggio di programmazione C#.

Di seguito un frammento di codice.

TypeScript:

let  testo: string = "Esempio di testo per cercare una determinata lettera o frase";
alert(testo.includes('una'));