Anteprima
Vedrai una selezione di 5 pagine su 18
Programmazione 1 e Laboratorio I Pag. 1 Programmazione 1 e Laboratorio I Pag. 2
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Programmazione 1 e Laboratorio I Pag. 6
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Programmazione 1 e Laboratorio I Pag. 11
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Programmazione 1 e Laboratorio I Pag. 16
1 su 18
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

Least Significant bit (LSb) bit più a destra

Bit massimo è 8 (255 byte), non posso aggiungerne altri -> Overflow

Se si superano i 255 byte si usa la Rappresentazione con modulo e segno

Due problemi

2 rappresentazioni diverse per zero

Somma di due positivi è negativa se riporto sul bit di segno

Il risultato della somma può risultare sbagliato quando gli addendi sono di due segni diversi

TIPS: controllare il segno dei due numeri, se risultano diversi eseguire una sottrazione

Numeri reali

Divisione in 3 parametri

Segno

Mantissa

Esponente

Non posso rappresentare numeri né troppo grandi, né troppo piccoli (né overflow, né underflow) JS li rappresenta +/- Infinity

Basi Σ

Base 2 n2 = (che va da 0 a N-1) di*2

da base 2 a 10 moltiplico ogni cifra per 2 elevato alla 0....Σ

Base 10 n10 = (che va da 0 a N-1) di*10

da base 10 a due divido ogni cifra per 2

Rappresentazione di interi con complemento a 1

Se il numero da codificare è positivo lo

si converte in binario

Se il numero è negativo si converte in binario del suo valore assoluto e si esegue l'operazione di complementazione*2

Cambia il peso assegnato al Msb, che pesa -2^n-1

Il bit significativo uguale a 1 sta a indicare che il numero è negativo

Vantaggi – 1 solo 0 0000 0000 se faccio complemento a 2 fa 0000 0000

Nell'esecuzione della somma non devo controllare il segno

Programmazione Orientata agli Oggetti

Valori e riferimenti

Passaggio per valori

Usato per i tipi base

Contengono il valore

Assegnamento copia il valore

Uguaglianza confronta il valore

Passaggio per riferimenti

Usato per i tipi complessi

Contengono un riferimento all'area di memoria, dove viene memorizzato il valore

Uso di indirizzi di memoria

Assegnamento copia l'indirizzo

Uguaglianza confronta il riferimento

Le modifiche fatte attraverso un riferimento, sono visibili attraverso altri riferimenti allo stesso oggetto.

Usate nelle funzioni Modifica dello scope globle.

Usate nelle

strutture dati (Es: Alberi, grafi)

Vantaggi

  • Oggetti semplici con comportamenti complessi, grazie ai metodi che erediteranno
  • È possibile modificare individualmente i singoli oggetti per adattarli a casi speciali, senza modificare il resto degli oggetti.
  • Più semplice modulizzare il codice a differenza della Programmazione Strutturata

Svantaggi

  • Molto complesso costruire mentalmente la struttura degli oggetti, prototipi, funzioni e costruttori

Funzioni e metodi

  • Funzioni matematiche -> funzioni pure, cioè si limitano a calcolare il risultato, senza avere effetti collaterali
  • Funzioni che hanno il compito di modificare l'oggetto, solitamente associate alle proprietà

Esempio

persona.compleanno = () => {this.età++} //pippo.compleanno, incrementa l'età di pippo

Metodi

funzione come proprietà di un oggetto

Vantaggio, permette a tutti gli elementi dell'oggetto di avere un metodo, senza doverlo associare ogni volta all'elemento

invocato.
New, è un operatore che ci permette di creare un nuovo oggetto e assegnare le sue proprietà e i suoi metodi all'interno del costruttore, cioè tutti gli elementi dell'oggetto hanno la stessa struttura.
Sintassi: var nome variabile = new Oggetto()
Esempio: var pippo = new Persona("Pippo", 35)
This, è un operatore che passa l'oggetto vuoto appena creato e restituisce l'oggetto inizializzato.
Esempio: function Persona (n, e) { this.nome= n; this.età = e; this.compleanno = function(){ this.età++; } }
Classi
Definizione: Una classe è un'astrazione che definisce le caratteristiche che avranno gli oggetti creati da essa. Attenzione: quando si crea una classe si deve sempre creare un costruttore, altrimenti non posso istanziare gli oggetti.
Sintassi: class nome { constructor (parametri){ this.nome parametro = parametro; } } con this manipolo l'oggetto e viene indicato l'indirizzo di.memoria

Esempio class Persona

class Persona{
  constructor (nome,cognome){
    this.nome = nome;
    this.cognome = cognome;
  }
}

Proprietà

Possono essere dichiarate prima della creazione del constructor, compaiono nell'oggetto che sarà l'istanza della classe

Sintassi

class *nome*{
  *proprietà* = ...
  constructor {}
}

Esempio class Torta

class Torta{
  Scadenza = "Maggio";
  constructor (nome,...){
    this.nome = nome;
  }
}

Costruttori

Funzione adibita a creare oggetti che hanno una certa struttura. Permette di istanziare oggetti della classe. La proprietà constructor riferisce l'oggetto funzione che li ha creati.

Sintassi

constructor ( ){
  ...
}

Esempio class Person

class Person {
  constructor(Person) {
    this.name = Person;
  }
}

Ereditarietà

Possono essere gerarchizzate in classi e sottoclassi -> catena dei prototipi (funzionamento sempre lo stesso) -> Ereditarietà. Possono avere dei comandi isPrototypeOf(), verificare se un certo prototipo è il prototipo di...

un oggetto hasOwnProperty(), verifica se l'oggetto possiede o meno quella proprietà

console.dir(), verifica di che tipo saranno gli oggetti creati con il constructor

Estendo la classe con una nuova classe, che erediterà tutto.

Meccanismo di ricerca

Overriding: una sottoclasse può ridefinire un metodo già definito in una sua superclasse (diretta o indiretta)

Una sottoclasse eredita tutti i metodi della superclasse (che non vengono ridefiniti)

Delete (sul prototipo) è anche possibile cancellare dalla sottoclasse un metodo definito dalla superclasse senza sovrascriverlo

Un'istanza può cancellare o sovrascrivere un metodo della propria classe

La parola chiave Super fa riferimento alla superclasse di un oggetto

"Evviva!"

Esempio class Studente extends Persona{ laurea() { } }

Membri Privati, metodi che non vogliono essere resi pubblici, magari usati per fare calcoli necessari per altri metodi. Visibili solo all'interno della classe,

definiti con #privateStatici, che alludono alla proprietà statiche della classe. Metodi di accesso
Definizione
Simulano la presenza di una proprietà di un oggetto, la cui scrittura e lettura causano l'esecuzione di un metodo
La creazione avviene usando due parole chiave davanti al nome delle proprietà:
  • get
  • set
Get (lettura)
Permette di leggere il valore dell'attributo
Sintassi
get nome(){ }
Esempio
get km(){ return this.#distanza }
Set (scrittura)
Permette di impostare il valore dell'attributo
Sintassi
set nome(){ }
Esempio
set km(v){ this.#distanza = v }
Ricerca di una proprietà Se l'oggetto ha la chiave cercata:
  • Lettura
    • Se la chiave è presente si controlla se è un getter o una proprietà base
    • Getter: si invoca la funzione corrispondente e il valore è quello restituito dalla funzione
    • Proprietà base: il valore è quello della chiave dell'oggetto
  • Se la chiave non è presente
Oggetto haun prototipo cerco la proprietà nel prototipo (ricorsivo) Oggetto non ha un prototipo il risultato è undefined Scrittura Se la chiave è presente si controlla se è un setter o una proprietà base Setter si invoca la funzione corrispondente, passando come unico argomento il valore che si vuole assegnare Proprietà base assegna il valore alla proprietà Se la chiave non è presente si cerca ricorsivamente un setter nel prototipo Setter, si invoca la funzione corrispondente, passando come argomento il valore che si vuole assegnare Setter non si trova, la proprietà viene aggiunta all'oggetto, con il valore che si vuole assegnare Prototipi Definizione Il prototipo di un oggetto è la struttura di più alto livello da cui discende l'oggetto. Possono creare una catena di prototipi, in quanto ogni prototipo può avere a sua volta un prototipo o più. Catena simile allo scope. Cima della catena: Objet, il cui

prototipo è null

Memorizzo nelle celle di memoria gli indirizzi in cui si ha il prototipo precedente

Per sapere qual'è il prototipo di un oggetto posso usare o.__proto__

Esempio a=[1,2,3] a.__proto__ -> []

Object.getPrototypeOf(o)

Esempio Object.getPrototypeOf(a) -> []

Leggere il valore di una proprietà di un oggetto si osserva la chiave dell'oggetto

Se la chiave è presente, il valore è quello della chiave dell'oggetto

Se la chiave non è presente

Oggetto ha un prototipo, si cerca la proprietà nel prototipo

Oggetto non ha un prototipo, il risultato è undefined

Operazioni

Aggiungere un metodo

A un particolare oggetto, metodo disponibile solo a quell'oggetto in particolare

Al prototipo di un oggetto, metodo disponibile per tutti gli oggetti che hanno quello stesso prototipo

Prototype

Definizione Proprietà che viene inizializzata automaticamente dal linguaggio quando si dichiara la funzione Crea un legame tra

Formattazione del testo

Scopo: Contenere un oggetto pronto per fare da prototipo per gli oggetti inizializzati dalla funzione Generato con le classi Generatori

Definizione: Funzioni speciali, che a differenza di eseguire tutto il codice al loro interno in un colpo solo, come in una normale funzione, ne eseguono solo una specifica parte, per poi riprendere l'esecuzione dal punto in cui era stata interrotta.

Sintassi:

function* f (parametri formali) {
  corpo;
  yield
}

oppure

*metodo() {
  corpo;
  yield
}

Il comando yield restituisce al chiamante il valore di espressione, ma riprende l'esecuzione dal comando successivo.

Esempio:

function* range(a,b) {
  var i=a;
  while (i<b) yield i++
}

Proprietà:

  • Value: valore restituito dal calcolo
  • Done: che risulterà false finché non ha finito tutti i passi (true quando la generazione sarà conclusa)

Metodi di invocazione:

  • Next()

Esempio:

var x = range (4,7)
x.next() -> {value:4;done:false}
x.next()

->{value:5;done:false} x.next() -> {value:6;done:false} x.next() -> {value:7;done:false}x.next() -> {value:undefined;done:true}

ForEsempio for (let i of range (4,7){ console.log(i) } // 4 5 6 7

Spread*Esempio* [...range(3,7)] ->[3,4,5,6]

Eccezioni*Definizione* Un'eccezione è un errore che si verifica a runtime dovuto ad un'operazione non consentita, che blocca l'esecuzione del programma.

Strict, modalità che genera più errori o avvertenze e quindi ci permette di avere un codice più corretto. Per attivarla -> Use strict

Gestire le eccezioni

Dettagli
A.A. 2022-2023
18 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Diletta..unipi di informazioni apprese con la frequenza delle lezioni di Programmazione 1 e Laboratorio e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Pisa o del prof Prencipe Giuseppe.