Mostra notizie nelle discussioni
  • Avatar
    ☺
    Programmazione
    Scritto da
    il 2020-02-22 20:05:41.0 alle 2020-02-22 20:05:41.0
    Trollate totali: 9885
    Programmare a oggetti con javascript
    Per capire come programmare a oggetti con javascript, partiremo scrivendo un programma "tradizionale" per calcolare area e parimetro di un quadrato e poi lo trasformeremo in un programma a oggetti.

    function calcolaPerimetroQuadrato(lato){
    	ensureQuadratoIsValid(lato);
    
    	return lato * 4;
    }
    
    function calcolaAreaQuadrato(lato){
    	ensureQuadratoIsValid(lato);
    	
    	return lato * lato;
    }
    
    function ensureQuadratoIsValid(lato){
    	if(!isANumberGreaterThanZero(lato)){
    		throw new Error("Il lato di un quadrato deve essere un numero superiore a 0");
    	}
    }
    
    
    function isANumberGreaterThanZero(number){
    	return !isNaN(number) && number > 0;
    }
    
    
    var lato;
    
    while(!isANumberGreaterThanZero(lato)){ 
    	lato = prompt("Inserisci il lato del quadrato. Deve essere un numero superiore a 0.");
    }
    
    console.log("Il perimetro del quadrato è " + calcolaPerimetroQuadrato(lato));
    console.log("L'area del quadrato è " + calcolaAreaQuadrato(lato));



    Nonostante le versioni più recenti di javascript supportino la programmazione a oggetti (certo, in una forma alquanto discutibile) molti sviluppatori utilizzano ancora la programmazione procedurale, che in effetti era l'unica forma supportata in origine.

    Perché non abituarsi a programmare a oggetti anche con javascript? Vediamo come.


    function Quadrato(lato){
    	var validator = new DataValidator();
    	if(!validator.isANumberGreaterThanZero(lato)){
    		throw new Error("Il lato di un quadrato deve essere un numero superiore a 0");
    	}
    
    	this.lato = lato;
    
    	this.getPerimetro = function(){
    		return this.lato * 4;
    	}
    
    	this.getArea = function(){
    		return this.lato * this.lato;
    	}
    }
    
    function DataValidator(){
    	this.isANumberGreaterThanZero = function(number){
    		return !isNaN(number) && number > 0;
    	}
    }
    
    
    var lato;
    var dataValidator = new DataValidator();
    
    while(!dataValidator.isANumberGreaterThanZero(lato)){ 
    	lato = prompt("Inserisci il lato del quadrato. Deve essere un numero superiore a 0.");
    }
    
    var quadrato = new Quadrato(lato);
    
    console.log("Il perimetro del quadrato è " + quadrato.getPerimetro());
    console.log("L'area del quadrato è " + quadrato.getArea());



    ... e se in futuro mi verrà chiesto di aggiungere altre cose, tipo il calcolo della diagonale (o tantissime altre cose che possono venire in mente) le metterò nel prototipo Quadrato.
    Tutte le funzioni di validazione di dati finiranno invece ammucchiate nel prototipo DataValidator, così tutti gli sviluppatori sapranno che troveranno lì dentro tutto quello che serve per validare i dati.

    Quindi ogni volta che un programmatore del team, da qualche parte nel software, avrà bisogno di un quadrato, comincierà prima di tutto a creare un quadrato con l'apposito prototipo e poi esplorerà tutti i metodi a disposizione per capire se c'è già quello che gli serve per giungere ai risultati richiesti. Se non c'è ancora, lo aggiunge oppure chiede al team di sviluppatori del Quadrato di aggiungerlo, perché magari solo loro hanno la specializzazione universitaria che serve per lavorare sui quadrati ed è perciò compito loro fare in modo che tutti gli altri sviluppatori hanno tutto quello che serve per lavorare con i quadrati.

    In questo modo il Quadrato diventa sempre più maturo, più intelligente, praticamente autocosciente e gli sviluppatori che arriveranno per ultimi, quando il cuore del programma sarà completo, non dovranno più preoccuparsi di inventare la ruota: si potranno preoccupare di modellare il front-end.

    Più elegante! Più strutturato! Più moderno! Più progressista! Con la lingua fuori




    **Modificato dall'autore il 22.02.2020 20:20**
    • Avatar
      Programmazione
      Scritto da
      Non Autenticato
      il 2020-02-24 22:17:52.0 alle 2020-02-24 22:17:52.0
      Re: Programmare a oggetti con javascript
      Scritto da: Mattia
      > Per capire come programmare a oggetti con javascript, partiremo scrivendo un programma "tradizionale" per calcolare area e parimetro di un quadrato e poi lo trasformeremo in un programma a oggetti.
      >
      >
      function calcolaPerimetroQuadrato(lato){
      > 	ensureQuadratoIsValid(lato);
      > 
      > 	return lato * 4;
      > }
      > 
      > function calcolaAreaQuadrato(lato){
      > 	ensureQuadratoIsValid(lato);
      > 	
      > 	return lato * lato;
      > }
      > 
      > function ensureQuadratoIsValid(lato){
      > 	if(!isANumberGreaterThanZero(lato)){
      > 		throw new Error("Il lato di un quadrato deve essere un numero superiore a 0");
      > 	}
      > }
      > 
      > 
      > function isANumberGreaterThanZero(number){
      > 	return !isNaN(number) && number > 0;
      > }
      > 
      > 
      > var lato;
      > 
      > while(!isANumberGreaterThanZero(lato)){ 
      > 	lato = prompt("Inserisci il lato del quadrato. Deve essere un numero superiore a 0.");
      > }
      > 
      > console.log("Il perimetro del quadrato è " + calcolaPerimetroQuadrato(lato));
      > console.log("L'area del quadrato è " + calcolaAreaQuadrato(lato));

      >
      >
      > Nonostante le versioni più recenti di javascript supportino la programmazione a oggetti (certo, in una forma alquanto discutibile) molti sviluppatori utilizzano ancora la programmazione procedurale, che in effetti era l'unica forma supportata in origine.
      >
      > Perché non abituarsi a programmare a oggetti anche con javascript? Vediamo come.
      >
      >
      >
      function Quadrato(lato){
      > 	var validator = new DataValidator();
      > 	if(!validator.isANumberGreaterThanZero(lato)){
      > 		throw new Error("Il lato di un quadrato deve essere un numero superiore a 0");
      > 	}
      > 
      > 	this.lato = lato;
      > 
      > 	this.getPerimetro = function(){
      > 		return this.lato * 4;
      > 	}
      > 
      > 	this.getArea = function(){
      > 		return this.lato * this.lato;
      > 	}
      > }
      > 
      > function DataValidator(){
      > 	this.isANumberGreaterThanZero = function(number){
      > 		return !isNaN(number) && number > 0;
      > 	}
      > }
      > 
      > 
      > var lato;
      > var dataValidator = new DataValidator();
      > 
      > while(!dataValidator.isANumberGreaterThanZero(lato)){ 
      > 	lato = prompt("Inserisci il lato del quadrato. Deve essere un numero superiore a 0.");
      > }
      > 
      > var quadrato = new Quadrato(lato);
      > 
      > console.log("Il perimetro del quadrato è " + quadrato.getPerimetro());
      > console.log("L'area del quadrato è " + quadrato.getArea());

      >
      >
      > ... e se in futuro mi verrà chiesto di aggiungere altre cose, tipo il calcolo della diagonale (o tantissime altre cose che possono venire in mente) le metterò nel prototipo Quadrato.
      > Tutte le funzioni di validazione di dati finiranno invece ammucchiate nel prototipo DataValidator, così tutti gli sviluppatori sapranno che troveranno lì dentro tutto quello che serve per validare i dati.
      >
      > Quindi ogni volta che un programmatore del team, da qualche parte nel software, avrà bisogno di un quadrato, comincierà prima di tutto a creare un quadrato con l'apposito prototipo e poi esplorerà tutti i metodi a disposizione per capire se c'è già quello che gli serve per giungere ai risultati richiesti. Se non c'è ancora, lo aggiunge oppure chiede al team di sviluppatori del Quadrato di aggiungerlo, perché magari solo loro hanno la specializzazione universitaria che serve per lavorare sui quadrati ed è perciò compito loro fare in modo che tutti gli altri sviluppatori hanno tutto quello che serve per lavorare con i quadrati.
      >
      > In questo modo il Quadrato diventa sempre più maturo, più intelligente, praticamente autocosciente e gli sviluppatori che arriveranno per ultimi, quando il cuore del programma sarà completo, non dovranno più preoccuparsi di inventare la ruota: si potranno preoccupare di modellare il front-end.
      >
      > Più elegante! Più strutturato! Più moderno! Più progressista! Con la lingua fuori

      Sin da quando ho iniziato a vedere Javascript gli oggetti ci sono sempre stati e gli ho sempre usati, però gli oggetti creati dal browser corrispondenti a caratteristiche della pagina. L'uso degli oggetti a livelo generale mi è tuttora arduo come concetto.
      Inoltre non ho una buona conoscenza degli oggetti relativi alle pagine web: quando ho un problema cerco una soluzione e uso gli oggetti indicati. È il difetto di una formazione informatica non sistematica ma a macchia di leopardo A bocca storta
<softv>

Pagina generata in 48 millisecondi

Utenti attivi: 8 nell'ultimo minuto, 30 negli ultimi cinque minuti, 66 negli ultimi 15 minuti