Estratto del documento

Programmazione a Oggetti

1 - Codifiche e Decodifiche:

La codifica è l'insieme delle regole che permettono di associare simboli a configurazioni del supporto di memorizzazione e/o trasmissione.

In informatica, la codifica del testo ha sempre creato problemi.

Il codice ASCII è il codice alfanumerico più diffuso per lo scambio di informazioni fra sistemi di elaborazione (sono codificati solo le lettere dell'alfabeto inglese).

ASCII è codificato su 7 bit quindi può rappresentare al massimo 27=128 simboli. Esistono la versione ASCII estesa a 8 bit.

Per gestire caratteri speciali delle diverse lingue sono state create altre codifiche, molte fra loro incompatibili.

11100001 e un byte corrisponde alla memorizzazione di un carattere dell'alfabeto (formato da 8 bit).

La codifica UNICODE permette di codificare tutto (caratteri e simboli di tutte le lingue conosciute). Arriva ad usare fino a 4 byte per carattere (32 bit).

Una stringa di caratteri UNICODE necessita di una trasformazione per essere salvata e scambiata fra sistemi o interpretata da un browser. Questo processo è affidato ad un codec.

Un codec è un algoritmo che trasforma ogni carattere in Unicode restituendo il corrispondente sequenza di byte.

Esistono diversi codec compatibili con Unicode ma le maggiori porte lavorano con codifiche multipiattaforma utilizzanti vari caratteri.

UTF-8 (salva in 8 bit); UTF-16 (salva in 16 bit, quindi è un sottoinsieme di Unicode); Altri formati UTF.

Python codifica le stringhe in modo diverso a seconda delle versioni:

  • Python 3 - Utilizza Unicode come standard
  • Python 2 - Memorizza usando una codifica a 8 bit

  • Stringhe memorizzate interamente come codice Unicode
  • Una stringa proveniente dall'esterno è subito convertita in Unicode
  • I problemi sono identificati in anticipo

  • Stringhe memorizzate interamente come sequenze di 8 bit
  • È necessario indicare la codifica utilizzata
  • I problemi sono difficili da individuare
  • L'uso del formato Unicode va richiesto esplicitamente

Il prima possibile bisogna cercare di convertire in Unicode tutto ciò che entra nello script.

Programmazione a Oggetti

1. Codifiche e Decodifiche:

La codifica è l'insieme delle regole che permettono di associare simboli a configurazioni di supporto di memorizzazione e/o trasmissione.

In informatica, la codifica del testo ha sempre creato problemi.

Il codice ASCII è il codice alfanumerico più diffuso per lo scambio di informazioni fra sistemi di elaborazione (sono codificati solo le lettere dell’alfabeto inglese (no accentate)). ASCII è codificato su 7 bit quindi può rappresentare al massimo 27=128 simboli diversi. La ASCII esteso è 1 bit.

Per gestire i caratteri speciali di diverse lingue sono state create altre codifiche, molte fra loro incompatibili.

11111111 è un byte e corrisponde alla memorizzazione di un carattere informatico (formato di 8 bit).

La codifica UNICODE promette di codificare tutto (caratteri e simboli di tutte le lingue conosciute). Arriva ad usare fino a 4 byte per carattere (=32 bit).

Una stringa di caratteri UNICODE necessita di una trasformazione per essere salvata e scambiata fra sistemi o interpretata da un browser. Questo processo è affidato ad un codec.

Un codec è un codice che trasforma un dato, un carattere in UNICODE, restituendo il corrispondente equivale a byte.

Esistono diversi codec compatibili con UNICODE. Il più maggior parte usa la lunghezza della codifica tuttavia sempre con caratteri.

UTF-8 (salva in 8 bit), UTF-16 (salva in 16 bit, quindi è un sottinsieme), Unicode permette diversi piani di UTF32.

Python codifica le stringhe in modo diverso a seconda delle versioni:

  • PYTHON 3 utilizza Unicode come standard
  • PYTHON 2 memorizza usando una codifica a 8 bit
  • Stringhe memorizzate internamente come UNICODE
  • Una stringa proveniente dall’esterno è subito convertita in UNICODE
  • I problemi sono identificati in anticipo
  • Stringhe memorizzate internamente come sequenze di 8 bit
  • È necessario indicare la codifica utilizzata
  • I problemi sono difficili da individuare
  • L'uso del formato UNICODE va richiesto esplicitamente

Il prima possibile bisogna cercare di convertire in Unicode tutto ciò che entra nello script.

# CODING = UTF-8

La direttiva coding deve essere inserita nelle prime due righe

dello script. In assenza di direttiva PYTHON 2 utilizzo la codifica ASCII

La direttiva coding stabilisce come decodificare le variabili

create nello script. In base al come è stato codificato file scelgo quale

codifica applicare.

È possibile forzare Python 2 a memorizzare una stringa

in Unicode.

variabile1 = ciao

variabile2 = variabile1.decode('UTF-8')

variabile2 = 'ciao'.decode('UTF-8')

oppure

Python mette a disposizione la libreria codecs per aprire

file di testo con codifiche diverse dallo ASCII

import codecs

f = codecs.open('file.txt', 'r', encoding = 'latin1', errors='ignore')

f.close()

Permette di specificare

la codifica

Se il programma incontra

caratteri non riconosciuti

si comporta in maniera

differente in base a come

viene scritto nel parametro errors

parametro opzionale

- STRICT: il programma si blocca e genera un error

- IGNORE: caratteri non conosciusti sono eliminati

- REPLACE: viene sostituito un carattere speciale ai caratteri non

riconosciuti.

Si possono usare i metodi encode() e decode() per

gestire le conversioni dei parametri in ingresso/uscita di

una funzione o una libreria esterna.

chr() permette di passare da codice ASCII numerico in base 10

a carattere corrispondente

unichr() da codice UNICODE numerico in base 10 a carattere

corrispondente

ord() da carattere a codice numerico in base 10

I primi 256 caratteri UNICODE collocano con i corrispondenti

ASCII.

Nella rappresentazione UNICODE si usano numeri esadecimali:

(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e, f). Una cifra esadecimale

rappresentato 4 bit = 24 combinazioni.

2. Programmazione ad Oggetti

OOP (Object-oriented Programming) è un paradigma di programmazione che prevede di risolvere i compiti con diversi oggetti che collaborano tra loro.

Ciascun oggetto ha un insieme di dati (attributi) e da operazioni (metodi) che può elaborare su loro.

Nella OOP si creano oggetti che rappresentano gli elementi importanti di un'applicazione/parti di una realtà.

Python dà la possibilità di impacchettare assieme dati e funzioni (che lavorano su dati) tra loro.

All'interno di una classe funzioni e variabili vengono chiamati rispettivamente metodi e attributi.

f = open("file1.txt", "r")

g = open("file2.txt", "w")

f e g sono due oggetti cioè 2 istanze della classe file.

Ogni oggetto eredità i metodi dalla classe, tuttavia i dati (valori degli attributi) sono gestiti separatamente.

La classe è un insieme di codice che contiene attributi e metodi.

Incapulamento

Il codice è diviso in interfaccia pubblica (metodi) e interfaccia privata (attributi)

Polimorfismo

Metodi con lo stesso nome, ma codo su oggetti diversi, comportano risultati differenti.

Ereditarietà

È possibile creare sottoclassi che modificano, specializzano estendono il codice contenuto nel genitore.

I metodi possono essere modificatori (se apportano modifiche all'oggetto su cui agiscono) o di solo accesso (se interrogano l'oggetto su cui agiscono per ottenere informazioni senza modificarlo).

Metodo Costruttore

class villetta:

def __init__(self, proprietario, indirizzo): self.p = proprietario # Attributo dell'oggetto self.indirizzo = indirizzo return "villetta di:", self.p, "in", self.indirizzo # serve per inizializzare le variabili dell'oggetto

V1 = villetta("rossi", "corso Italia")

V1 è un'istanza della classe villetta

Il primo parametro di un metodo è sempre self

Attributi dell'oggetto

  1. Sono sempre referenziati utilizzando self
  2. Self è la variabile parametro che fa sempre automaticamente riferimento all'oggetto su cui il metodo è stato invocato
  3. Uno stesso attributo ed oggetto può avere valori diversi da un oggetto all'altro

Attributi di classe

  1. Per far riferimento agli attributi di classe si premette il nome della classe
  2. Gli attributi di classe sono condivisi tra tutti gli oggetti

Python ricorre all'escamotage del "riferimento": attraverso "self" per gli attributi dell'oggetto e attraverso il nome della classe per gli attributi di classe.

Nei parametri formali di una funzione possono essere inseriti anche dei parametri opzionali. Possono essere usati sia nelle funzioni che nei metodi degli oggetti.

L'ereditarietà rappresenta una relazione tra una superclasse e una sottoclasse. (sottoclasse) eredita dai (attributi) e il comportamento (metodi) della superclasse (classe padre).

Vantaggio dell'ereditarietà è quello di risparmiare/ristrutturare il codice permettendo di rappresentare oggetti aventi comportamenti diversi.

Spesso le durate possono essere espresse con una variabile di oggetto.

In Python si definisce una sottoclasse specificando cosa lo renda diverso dalla sua superclasse.

  • I sottoclassi ereditano: tutte le variabili di oggetto e tutti i metodi che non si modificano
  • Le sottoclassi possono aggiungere variabili nuove e metodi nuovi, metodi uguali ma da usare in modo particolarmente metodi ereditati.
  • Bisogna: scrivere il metodo nella sottoclasse con stesso nome, stessi parametri, nuova implementazione diversa.

Overloading:

Non è ammesso in Python la creazione di un metodo con stesso nome e parametri diversi, ma esso si può simulare utilizzando parametri opzionali.

Overriding: Quando una classe figlia ridefinisce un metodo dalla classe padre.

Una classe può ereditare da più padri ed effettuare l'overriding.

Se 2 classi padre offrono un metodo col lo stesso nome viene scelta la classe padre che appare più a sinistra tra le ( ) nella dichiarazione della classe figlia.

L'insieme di tutti i metodi di una classe, con la descrizione del loro comportamento è l'interfaccia pubblica della classe.

L'incapsulamento mette a disposizione un'interfaccia pubblica, mantenendo nascosti i dettagli implementativi.

Si può evitare in caso di modifica di una classe, di modificare tutti i programmi che la utilizzano, tramite incapsulamento si creano dei metodi per accedere ai dati.

Si nascondono le strutture dati e/o le implementazioni sottostanti. L'obiettivo è forzare l'accesso ai dati attraverso i metodi dell'interfaccia.

"_" è usato per indicare attributi che saranno modificati a breve.

Al di fuori delle classe non sono visibili gli attributi/metodi i cui nomi iniziano con "__".

Metodi speciali:

  • __str__(self) Restituisce una stringa contenente una rappresentazione in stringhe.
  • __mul__(...) Permette di implementare l'operazione di moltiplicazione.
  • __add__(...) Permette di implementare l'operazione di somma.

3. Eccezioni:

Un'eccezione è un evento accidentale (spesso un errore) che accade durante l'esecuzione di un programma, che interrompe il normale flusso di esecuzione.

Quando in uno script Python viene sollevata un'eccezione:

  • Il programmatore può specificare del codice per gestire un'eccezione.
  • Se il codice riesce a gestire l'eccezione, l'esecuzione del programma può continuare.
  • Se l'eccezione non può essere gestita, l'esecuzione dello script viene interrotta.

Un'eccezione è rappresentata attraverso un oggetto Python. Si possono definire nuove eccezioni con le classi.

L'ultima riga di un messaggio di errore indica cosa è successo.

Le eccezioni sono di diversi tipi, ed il loro tipo viene stampato come parte del messaggio.

Anteprima
Vedrai una selezione di 3 pagine su 6
Appunti Completi di Laboratorio d'Informatica Pag. 1 Appunti Completi di Laboratorio d'Informatica Pag. 2
Anteprima di 3 pagg. su 6.
Scarica il documento per vederlo tutto.
Appunti Completi di Laboratorio d'Informatica Pag. 6
1 su 6
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Erika.Valle di informazioni apprese con la frequenza delle lezioni di Laboratorio di informatica 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 Milano - Bicocca o del prof Boselli Roberto.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community