OOP: Object Oriented Programming

Documenti analoghi
Rudimenti di Python. senza rodimenti di Python

Ingegneria del Software

Programmazione in Python. Moreno Marzolla

Programmazione Orientata agli Oggetti e Scripting in Python

Introduzione al Python

La programmazione ad oggetti: chiamate di metodi. Overloading. This

Programmazione Orientata agli Oggetti

Fasi di un Compilatore

Python. Valerio Perticone

Laboratorio di programmazione

ISTITUTO STATALE D ISTRUZIONE SUPERIORE FERRARIS - BRUNELLESCHI EMPOLI Anno scolastico 2015/2016

Fondamenti di Programmazione

Principi di Progettazione del Software. Principi di Progettazione del Software a.a

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Il TDA Dictionary. Definizione informale. I metodi del TDA Dictionary 1. Applicazioni. I metodi del TDA Dictionary 2. I metodi del TDA Dictionary 3

Introduzione alla programmazione Object Oriented. Luca Lista

Corso di Fondamenti di Informatica I

IL CONCETTO DI CLASSE

Ereditarietà e Polimorfismo

24 - Possibili approfondimenti

I Tipi di Dato Astratto

Caratteristiche di un linguaggio ad alto livello

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Programmazione orientata agli oggetti

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre Negli esercizi proposti si utilizzano le seguenti classi:

Un piccolo esempio: script

I livelli dei linguaggi. Introduzione alla OOP Object Oriented Programming. La programmazione procedurale separa il calcolo dalla memoria

Corso di Programmazione a oggetti

Definizione di classi

Breve Excursus su Evoluzione della Programmazione. Corso di Linguaggi e Metodologie di Programmazione

Oggetti Composti (1) Oggetti Composti (2)

Proprietà delle Classi e degli Oggetti in Java

Oggetti e classi. Cos è un oggetto

Esempio Principio di sostituibilità

Cosa è l Informatica?

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

Ricordiamo come si definisce una funzione

Indice generale Prefazione...xiii Capitolo 1 Introduzione...1 Capitolo 2 Sviluppo del software, tipi di dati ed espressioni...31

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Programmazione Java: Polimorfismo

Programmazione ad Oggetti

Sommario. Le strutture Le classi

Corso di Fondamenti di Informatica Tipi strutturati: Strutture typedef Anno Accademico 2008/2009 Francesco Tortorella

Informatica I. Ingegneria Medica. Prof. Diego Salamon

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Classi di memorizzazione

Fondamenti di Informatica T-1. Ereditarietà & Polimorfismo

Array in Fortran 90. Ing. Luca De Santis. Anno accademico 2006/2007. DIS - Dipartimento di informatica e sistemistica

RETI DI CALCOLATORI Linguaggio Java: Eccezioni

Corso di Fondamenti di Informatica Il sistema dei tipi in C++

Modelli di interazione tra processi

Corso Programmazione Java Standard

Prova di Laboratorio del [ Corso A-B di Programmazione (A.A. 2004/05) Esempio: Media Modalità di consegna:

Sviluppo di programmi

Confronti, equals. Operatori Relazionali, confronti Confronti fra Oggetti, ridefinizione di equals. Laboratorio di Programmazione - Luca Tesei

L Abstract Windowing Toolkit. Le GUI in Java. Il Frame. Cenni sull ereditarietà. Gianpaolo Cugola - Sistemi Informativi in Rete

Università degli studi di Bergamo. Informatica II. Programmazione Object Oriented Tutorato. Lezione 1. Dott. Marco Guarnieri Dott. Eros Magri

UML. Il linguaggio UML e ArgoUML. Ingegneria dei sistemi software 2009/ /09/2009

SAX e DOM. Analisi di un documento

CONCETTI E ARCHITETTURA DI UN SISTEMA DI BASI DI DATI

Definizione di metodi in Java

Laboratorio di Informatica Lezione 1

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

ADT: Abstract Data Type. Quasi ADT. ADT per collezioni di dati (code generalizzate) 04 I tipi di dati astratti (I parte)

Rappresentazione dell Informazione

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Eccezioni. Comportamento di default (esempio) Propagazione delle eccezioni

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

UTILIZZIAMO GLI OPERATORI MATEMATICI E COMMENTIAMO IL CODICE

L input da tastiera in Java. Dott. Ing. M. Banci, PhD

Puntatori. Fondamenti di Programmazione

Programmazione orientata agli oggetti Classi, package e file system. Package

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Rapida Nota sulla Rappresentazione dei Caratteri

Indice Introduzione I fondamenti di C#

Esonero del corso di Programmazione a Oggetti

Fondamenti di Informatica T-1

Programmazione in Java. Indipendenza dalla piattaforma. Indipendenza dalla piattaforma. Autore: Roberto Fabbrica Diapo 1.

20. LA PROGRAMMAZIONE AD OGGETTI

Il linguaggio C. Notate che...

Informatica e Bioinformatica: AND, OR, NOT

Dipartimento di INFORMATICA TC - TTRG. Anno Scolastico Piano di Lavoro Disciplinare. INFORMATICA Articolazione: INFORMATICA Classe IV

Informazioni generali sul corso

Lezione 10 programmazione in Java. Anteprima. Programmazione OO. La programmazione orientata agli Oggetti. Javadoc. Esercizi

Linguaggio C: le funzioni. Introduzione e sintassi

Introduzione all' OO in Python

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Linguaggio C. tipi di dati definiti dall utente. Università degli Studi di Brescia. Docente: Massimiliano Giacomin

Cenni sul preprocessore e il suo utilizzo

Gerarchia di classi Java 1

Diagrammi di classe e sistemi orientati agli oggetti

Laboratorio di Programmazione Laurea in Ingegneria Civile e Ambientale

Fondamenti di Programmazione

Il linguaggio del calcolatore: linguaggio macchina e linguaggio assembly

Fondamenti di Informatica T-1. Costruttori Ereditarietà

Lezione 2: Comandi avanzati della Shell di Unix

Il C nel C++: Funzioni

Transcript:

OOP: Object Oriented Programming Riferimenti per questa parte: 1. Capitoli 7 e 8 del testo di riferimento 2. https://docs.python.org/3.6/tutorial/classes.html

OOP: Idea Principale L idea principale della programmazione orientate agli oggetti è di pensare agli oggetti come delle collezzioni sia di dati che di metodi che operano su quei dati. Gli oggetti sono una caratteristica dominante di Python: ogni oggetto ha un tipo che definisce il tipo di operazioni che un programma può eseguire su quell oggeto. Abbiamo visto come definire nuove funzioni, ora vediamo come definire nuovi tipi

Esempio: Numeri Complessi Tipo: Numero complesso Dati: due numeri reali, la parte reale e quella immaginaria Operazioni: somma, stampa a video, calcolo del coniugato La specifica delle operazioni possibili definisce una interfaccia tra i dati ed il resto del programma. Il modo (l algoritmo usato e la sua implementazione) in cui viene calcolato il coniugato di un numero complesso viene nascosto al resto del programma (ENCAPSULATION)

Abstract Data Types Un Abstract Data Type (ADT) è un insieme di oggetti e di operazioni sugli stessi oggetti Operazioni ed oggetti sono raggruppati in modo che possano essere passati da una parte all altra del programma Due concetti chiave della programmazione sono: 1. DECOMPOSITION: viene usata per creare una struttura nel nostro programma 2. ABSTRACTION: si cerca di eliminare i dettagli insignificanti per concentrarsi sugli aspetti fondamentali di un problema ESEMPIO: pensare sempre ai numeri complessi, quando vengono passati ad una funzione

Classi Un Abstract Data Type (ADT) è un insieme di oggetti e di operazioni sugli stessi oggetti. In Python, si implementano nuovi ADT definendo nuoci classi class NumeroComplesso: def init (self, real, imag): """Metodo costruttore, chiamato quando viene inizializzato un nuovo oggetto""" self.a = real self.b = imag def somma(self, c): """Somma al numero corrente il numero complesso c""" self.a = self.a + c.a self.b = self.b + c.b def str (self): """Ritorna una stringa che rappresenta il numero""" return str(self.a) + ' + ' + str(self.b) +'i'

Operazioni su Classi Una classe supporta due tipi di operazioni: 1. Istanziazione: viene usata per creare una nuova istanza della classe, ovvero un nuovo oggetto del tipo definite dalla classe stessa. Quando viene creato un nuovo oggetto viene sempre richiamato il suo metodo costruttore: init 2. Riferimento ai suoi attributi: si usa la dot notation per acceddere ad attributi e metodi della classe ATTENZIONE: l oggetto associato all espressione che precede il dot viene implicitamente passato come primo parametro del metodo, e viene chiamato, per convenzione, sempre self (Vedi notebook)

Metodi con underscore XX In Python esistono diversi metodi che possono essere definiti con un doppio underscore prima e dopo il nome del metodo, tipo init ALTRI ESEMPI: str (self): restiruisce una stringa, e viene per esempio chiamato in automatic quando un oggetto viene passatto alla funzione print() add (self, other): viene utilizzato per fare l OVERLOADING dell operatore di addizione + eq (self, other):

Inheritance L EREDITARIETÀ offre un meccanismo relativamente semplice per costruire gruppi di tipi (classi) collegati tra loro. In pratica permette di costruire una gerarchia di tipi, in cui un dato tipo (subclass) può ereditare tutti gli attributi e metodi dal tipo da cui deriva (la sua superclass) Per alcuni esempi e maggiori dettagli si rimanda al Capitolo 8 del libro di riferimento.

Object Oriented vs Functional Prog. L uso di ADT incoraggia l analista programmatore a pensare più in termini di OGGETTI che di FUNZIONI. Un programma diventa una collezione di TIPI invece che una collezione di FUNZIONI.

Esempio 1: Adder Una classe rappresenta dei dati con delle operazioni collegate Una closure rappresenta delle operazioni con dei dati collegati ESEMPIO: vedi notebook

Esempio 2: Counter Una classe rappresenta dei dati con delle operazioni collegate Una closure rappresenta delle operazioni con dei dati collegati ESEMPIO: vedi notebook

PARTE SECONDA: HANDLING EXCEPTIONS

Handling Exceptions 1/4 Sino ad ora abbiamo visto le Exceptions come a degli errori gravi che causano un interruzione brutale del nostro programma. Esempi dall prima lezione: ValueError: invalid literal for int() with base 10: '3.0' AttributeError: readonly attribute (z.real = 3) NameError: name 'x' is not defined (dopo del x) TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int TypeError: 'int' object is not iterable

Handling Exceptions 2/4 Questi sono tutti esempi di eccezioni generate dal sistema per gestire ERRORI in parte prevedibili del programma. ValueError: invalid literal for int() with base 10: '3.0' AttributeError: readonly attribute (z.real = 3) NameError: name 'x' is not defined (dopo del x) TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int TypeError: 'int' object is not iterable

Handling Exceptions 3/4 Gli errori precedent sono generate dal comando raise ValueError( Vostro msg errore ) E possono essere gestiti tramite i comandi try: ChiamataFunzione() except ValueError: print( decidete voi cosa fare, ma no crash! )

Handling Exceptions 4/4 Questi sono tutti esempi di eccezioni generate dal sistema per gestire ERRORI in parte prevedibili del programma. Gli errori precedent sono generate dal comando raise ValueError( Vostro msg errore ) E possono essere gestiti tramite i comandi try: ChiamataFunzione() except ValueError: print( decidete voi cosa fare, ma no crash! ) LE ECCEZIONI SONO UN MODO PER SEMPLIFICARE IL FLUSSO DEL PROGRAMMA