SWAP - Semantic Web Access and Personalization Research Group

Metodi Avanzati di Programmazione (Corso B) (A.A. 2019/2020)

CdL in Informatica

Docente: Pierpaolo Basile
CFU: 7+2 (86 ore, 56 teoria e 30 ore esercitazione e/o laboratorio)
Inizio lezioni: (secondo semestre)
Metodi di valutazione: prova scritta (o esoneri) e caso di studio sviluppato in parte in laboratorio, realizzato in un gruppo di massimo tre componenti
Scheda del corso: PDF scheda

News

Calendario delle lezioni

Programma preliminare

  • Introduzione al corso
  • Introduzione ai paradigmi di programmazione: i tre approcci alla programmazione: operazionale, definizionale e dimostrazionale
  • L’astrazione nella programmazione
    • Fondamenti: Introduzione all'astrazione
    • Astrazione di funzione, di procedura, di controllo e di selettore
    • Astrazione di tipo e tipi astratti di dato
    • Specifiche algebriche e assiomatiche per i tipi astratti di dato
    • I moduli per l’incapsulamento dell’informazione e l'information hiding
    • Oggetti e classi di oggetti
    • Astrazione di dati: Tipo astratto di dato vs. classe di oggetti
    • Astrazione generica
    • Ambienti e linguaggi di programmazione
  • La programmazione orientata agli oggetti
    • Fondamenti: oggetti, classi concrete, classi astratte, metaclassi, ereditarietà singola ed ereditarietà multipla, polimorfismo, gerarchia di classi e gerarchia di interfacce
    • Composizione di classi
    • Confronto tra ereditarietà e composizione nel riuso del software
    • Ambienti e linguaggi di programmazione
    • Java: caratteristiche generali del linguaggio
    • Java e Internet
    • Java vs. C++
    • Ambienti di sviluppo Java
    • Oggetti in Java: costruttori, distruttori, metodi, argomenti e valori di ritorno
    • Controllare il flusso di esecuzione: uso degli operatori Java, il controllo di esecuzione, l’inizializzazione
    • Nascondere le implementazioni: i package, i modificatori di accesso, le interfacce
    • Il riuso delle classi in Java: ereditarietà, derivazione, protetta, polimorfismo
    • I contenitori: array e collezioni
    • Approfondimenti su Java: il trattamento delle eccezioni, identificazione di tipo al run-time, programmazione generica in Java, il sistema I/O di Java
    • Connessione con le Basi di Dati: JDBC
    • Progettazione e creazione di interfacce per applicazioni: il package SWING
    • Programmazione in rete: socket
    • Il multithreading: creazione di classi attive, sincronizzazione nell’accesso dei metodi
    • Estensione funzionale in Java: Lambda espressioni in Java, Pipeline e stream, Cenni di computazione in parallelo
  • Esercitazioni guidate in Java
    • Progetto di applicazioni con singole classi
    • Progetto di applicazioni con più classi organizzate gerarchicamente e in package
    • Progetto di applicazioni con classi astratte e uso del polimorfismo
    • Progetto di applicazioni con contenitori e trattamento delle eccezioni
    • Progetto di applicazioni con I/O da file
    • Progetto di connessione a database
    • Progetto di applicazioni con GUI mediante con SWING
    • Progetto di applicazioni client-server e multithreading

Proposte di tesi

  • Progettazione e sviluppo di un engine per l'esecuzione di adventure game su Pepper
  • Progettazione e sviluppo di algoritmi per l'analisi automatica del linguaggio

Progetti

Lo scopo del progetto è lo sviluppo di un'avventura testuale o grafica utilizzando il linguaggio Java e le nozioni apprese durante il corso. In questa sezione verranno pubblicati i progetti che gli studenti hanno deciso di rendere pubblici.


The Heist

Nei panni di un rapinatore seriale, ti concedi un ultimo colpo: un assalto alla gioielleria che custodisce il diamante più prezioso al mondo! Riuscirai a farla franca?

Nome del team: Diamond Inc.

Team:

Link al progetto: https://github.com/matteomannavola/TheHeist


TextAdventure

Un'avventura testuale old school ispirata ad una quest di Dungeons & Dragons.

Nome del team: error404

Team:

Link al progetto: https://github.com/GianNGian/TextAdventure


LO HOBBIT

Gioca a questa fantastica avventura grafica che ripercorre in maniera indedita e fantasiosa le avventure del Signore degli Anelli e Lo Hobbit.Trova oggetti,risolvi enigmi,sconfiggi i nemici che ti sbarreranno la strada e diventa il nuovo eroe della Terra di Mezzo!

Nome del team: Tom & Leo

Team:

Link al progetto: https://mega.nz/folder/qkc30QbK#Lj0LD2mUsnM4FRLeRREagw


IL LABIRINTO DI CNOSSO

Questa applicazione implementa il gioco de Il Labirinto di Cnosso. Lo scopo di questo progetto è stato quello di creare un'avventura testuale basata sul pattern architetturale MVC (Model-View-Controller) con sistema Client/Server avente una doppia versione di interfaccia utente: grafica (Graphical User Interface - GUI) e a riga di comando (Command Line Interface - CLI), un database contenente i dati per il login e un file di configurazione in formato YAML per i dati del gioco.

Nome del team: Troika

Team:

Link al progetto: https://github.com/map-troika/troika


Dream Voyage

Un avventura punta e clicca realizzata interamente con disegni fatti a mano! Risolvi gli enigmi ed aiuta il protagonista a ritrovare la via di casa...sarà tutto un sogno?

Nome del team: GGez

Team:

  • Christian Novara
  • Antonio Martiradonna
  • Giuseppe Miglionico

Link al progetto: https://github.com/ElderChris/GGEz


SPACE COOKIES

L'avventura racconta di un personaggio che, dopo aver commesso un crimine sulla Terra, viene condannato a vivere in isolamento per 5 anni all'interno di una navicella spaziale. L'obiettivo finale sarà quello di raggiungere una teca contenente dei biscotti.

Nome del team: DLC

Team:

Link al progetto: https://github.com/DLC-Adventure/SpaceCookies


CoronaBBS

Applicazione basata su sistema BBS, la quale permette all'utente di poter scegliere a quale tra 1 o più avventure testuali giocare. PrisonBreak: avventura testuale tratta dall'omonima serie americana "Prison Break". Un uomo di nome Michael Scofield, protagonista della storia, decide di farsi arrestare di proposito in modo da poter entrare nel carcere di Fox River, dove il fratello, Lincoln Burrows è stato imprigionato ingiustamente. Riuscirai a risolvere tutti gli enigmi e scappare con tuo fratello?

Nome del team: Corona-Extra

Team:

Link al progetto: https://github.com/UniBaBoyz/CoronaBBS


Hive Mind

Ti svegli in una struttura inquietante e sconosciuta, senza memoria e con pochi indizi sul tuo ruolo. Esplora un tetro laboratorio, interagisci con l'ambiente circostante, risolvi enigmi e... fai la scelta che ritieni più corretta. (Due finali disponibili)

Nome del team: GliAccendiniSgasati

Team:

Link al progetto: https://github.com/Abysswalker90/Hive-Mind-Game


MetaStation

Il gioco tratta la disavventura che due studenti devono affrontare per poter svolgere l'ultimo esame della sessione. Una serie di avvenimenti li porterà ad attraversare vari mondi per poter recuperare un oggetto essenziale per il loro obiettivo. Ce la faranno i due "eroi" a fare questo esame?

Nome del team: Through the Portals

Team:

  • Marzella Anna
  • Melero Cavallo Martina
  • Tauro Giovanni

Link al progetto: https://github.com/mmc185/MAPAdventure