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

Astrazioni

Obiettivo: risolvere un problema complesso tramite la sua scomposizione in singoli problemi indipendenti di complessità minore.

Sottoproblemi: ogni sottoproblema deve essere caratterizzato da:

  • risolvibile indipendentemente dagli altri, consentendo di concentrarsi su di esso
  • stando attento di complemtarlo degli altri

Possedere autonomia per risolvere il problema.

Unità software: Modulo di sviluppo su cui ogni modulo (metodo) unita di singola responsabilità indipendente a cui gli altri moduli si basano ed utilizzano.

Astrazione:

  • ignorare alcuni dettagli non necessari, relativi ad un altro livello di astrazione
  • astrazione e i relativi livelli sono usati per suddividere il problema in sottoproblemi, dalle seno fino.

Astr.

Per parametri: Consente di riusare il codice per diverse ins, nell’astrazione per parametri. Esempio: parametro che viene passato come separata. Invece che nel main -> Riuso

Per specifica: Consente di rimuovere dettagli implementativi per riutilizzare (di una funzione) termini e la definizione del contratto. Per esempio API commentano l’uso di una funzione, senza dettagli per l’implementazione. Dev concentrarsi su ciò una cosa in meno.

Contratto: definizione di che cosa fa una funzione, che dati modifica, di che input ha bisogno e che cosa restituisce. Usato per indicare adeguatamente le condizioni per l’uso di tale funzione.

Si basa sul fatto che: se le precondizioni (condizioni sull’input) sono valide allora sono garantite quelle sull’output.

Astrazione per parametri alla funzione vengono passati parametri. Si consente così un riutilizzo evitando che questa operi soltanto su parametri globali (e quindi non passati).

Funzione parziale: Una funzione è parziale se il suo comportamento nel caso di input validi secondo un sott’insieme degli input validi secondo l’argomento. Ad esempio argomento entro nel contratto è funzione solo se la lunghezza di tale vettore deve essere minore di 10, essa è parziale se ciò per scontata che l'input sia sempre < 10.

Funzione totale: se ha un comportamento deterministico per ogni delle eccezioni input fornito, tramite la gestione delle eccezioni.

Funzione parziale -> se deve essere usata solo dentro alle input

Funzione totale -> se deve essere usata sempre, detta completamente.

decomposition vs astrazione (per specifica)

Separare il codice in blocchi semplici, dividere per leggibilità, senza contratto.

è decomposizione ma con meno dettagli visibili ed un contratto. Obiettivo: indipendenza e riusare la componente.

Astrazione procedurale

- dividere blocchi di codice in funzioni per compiere determinate operazioni. Non è necessariamente un metodo, utilizzata due dettagli e non necessariamente sono indipendenti.

Astrazione sui dati

- vengono introdotte strutture dati per cui implementare metodi non è visibile per organizzazione le operazioni. I metodi forniti devono consentire di effettuare tutte le operazioni necessarie.

Categorizzazione

- metodologia per dividere le informazioni e quindi ridurle in numero per gestire più facilmente. Si ottengono degli oggetti (categorie), sui cui poi vengono implementati dei metodi. Es: Studente, Appelli, Esami...

Vantaggi: eredità di metodi e attributi.

Astrazione sulle iterazioni

- consente di avere informazioni sugli elementi di una struttura dati senza conoscerne la loro implementazione.

JAVA ABC

Style Rules

  • package name: camelCase
  • class name: CamelCase - usare nomi (customer, dog...)
  • method/variable: camelCase, method name -> verb + object: enrollDog
  • variable name length proporzionale allo scope.

Overview

oggetto = istanza di una classe presenta alcuni campi, che sono accessibili in due modi:

  • per field: aStudent.name = possibile dove il field non è privato.
  • per metodo: aStudent.getName() tramite il metodo implementato.

privato = variabile/metodo accessibile solo internamente alla classe in cui è stata definita.

variabile statica = condivisa fra tutte le istanze di tale classe, se in ogni istanza di quella classe.

classe

  • variabili di istanza
  • metodi di accesso/modifica, costruttori della classe

proprietà di una astrazione (= procedura):

  1. minimale: deve fare una sola cosa nel modo più generico ma semplice possibile. Bene ad esempio cercare un valore in un vettore possibilmente generico, senza troppe conclusioni.
  2. generale: una astrazione è generale se può accettare input di diversa natura; deve accettare object ad esempio.
  3. indeterminata: se non tutti gli input hanno una conclusione che specifica se vanno bene o male.
  4. deterministica: se tutti i fattori che modificano e contribuiscono all'output sono specificati nel contratto. (esempio: ne è base sull'ora attuale)
  5. semplicità e poca responsabilità

astrazione parziale (= funzioni parziali)

Una funzione parziale ha comportamento non deterministico per alcuni input non è sicura (crash).

L'utente che la usa deve essere attento a chiamarla nel modo corretto altrimenti può accorgersi difficilmente del problema. Compreso generato e quale funzione ne è la causa.

Soluzione: trasformarla in totale inserendo errori ed eccezioni.

modi di trasformare le f. parziali in totali

  1. inserendo output riservati all'errore tale da non possa essere generato in caso di esecuzione corretto
  2. generando una eccezione
  3. tramite condizioni assert(...) che bloccano l'esecuzione se il contenuto di (...) è falso.

Questo consente di non usare if e complicare il codice, sono usate solo per debug e test.

ECCEZIONI

terminologia

  • software state: insieme di registri + memoria + files
  • software fault: problema statico; comportamento indesiderato dovuto da linee di codice errate
  • software error: stato del software incorretto con variabili con valore errato.Manifestazione dei software faults, effetti alla linea errata. Mille concettuali ad esempio.

Abstract data type

rappresentazione + operazioni

  • (strutture dati, variabili) (metodi, con contratti e implementazioni)

definire un ADT

  • Fornire abbastanza operazioni all'utilizzatore per fare in modo che non si debba conoscere la sua implementazione, la sua rappresentazione.
  • Così facendo si semplifica il lavoro dell'utilizzatore e si può in futuro cambiare la implementazione dell'ADT, cambiando le sue strutture dati.

un ADT è definito dalle sue operazioni

stato dell'oggetto

insieme dei valori delle strutture dati di un oggetto in un dato istante (per oggetti non richiede istanza)

contratto

deve essere completamente indipendente dalla implementazione (il Contratto DEVE restare lo stesso se la implementazione cambia)

limite

Il limite del dato astratto è bordo, la forma, è dato dalle operazioni consentite e non è senso che non devono far trasparire le strutture dati usate.

tipi di operazioni

  • costruttore: crea una nuova istanza dell'ADT inizializzando certi valori della rappresentazione
  • modificatore: mutano lo stato dell'oggetto, se è immutabile, ne creano uno nuovo con determinati valori (fare copia dell'originale)
  • osservatore: restituisci un valore dello stato della istanza osservata.

norme implementative

  • variabili di istanza per rappresentare componenti dell'oggetto
  • private le var. di istanza e le altre strutture dati DEVONO essere private altrimenti non c'le astrazione e si espone la implementazione
  • getter/setter non devono mostrare la implementazione
  • static i variabili static sono 1 per tutte le istanze. Sono variabili di classe, non di oggetto; non rappresentano il concetto di oggetto
  • i metodi devono essere non static se non espressamente voluto.

equality

il concetto di equality non è ovvio, può essere shallow o deep.

shallow è che confronto puntatore agli oggetti inclusi nell'oggetto testato; deep fa ricorsivamente testa l'equality degli oggetti inclusi.

equals va definito classe per classe per rendelo come si

Dettagli
Publisher
A.A. 2016-2017
20 pagine
2 download
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher lore9625 di informazioni apprese con la frequenza delle lezioni di Programmazione orientata agli oggetti 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 Udine o del prof Brajnik Giorgio.