Giter VIP home page Giter VIP logo

oop-lab-csharp's Introduction

Programmazione a oggetti - Lab C-Sharp

L'ordine degli esercizi sarebbe il seguente:

  1. Collections
  2. Exceptions
  3. OperatorsOverloading
  4. ExtensionMethods
  5. DelegatesAndEvents

Svolgere gli esercizi in ordine diverso non è un problema.

Nota generale per tutti gli esercizi: lo statement throw new NotImplementedException(); è un segnaposto che va sempre sostituito con del codice prodotto da voi.

Esercizio 1 - Collezioni

Il progetto Collections consiste in una semplice libreria che offre la possibilità di modellare un utente di un generico social network.

Scopo dell'esercizio è approfondire le Collections e il loro utilizzo, in particolare:

  1. Osservare e capire l'interfaccia IUser e ISocialNetworkUser
  2. Completare l'implementazione di User e SocialNetworkUser

Il test contenuto in TestSocialNetworkUser.cs tenta di chiarire il comportamento atteso per le entità soprariportate. L'esercizio si può considerare concluso quando il test termina con successo.

Esercizio 2 - Eccezioni

Il progetto Exceptions contiene l'intefaccia IFixedSizeQueue che rappresenta una collezione mutevole di tipo FIFO dalla capacità prefissata. Un tentativo di inserire un elemento in una coda piena, deve produrre una FullQueueException. Invece, un tentativo di prelevare un elemento da una cosa vuota, deve produrre una EmptyQueueException.

Scopo dell'esercizio è completare l'implementazione della classe FixedSizeQueue, assicurandosi di lanciare correttamente o due tipi di eccezione forniti: EmptyQueueException e FullQueueException.

Il test contenuto in TestFixedSizeQueue.cs verifica e chiarisce il comportamento atteso per le entità soprariportate. L'esercizio si può considerare concluso quando tutti i test terminano con successo.

Esercizio 3 - Overloading degli operatori

Il progetto OperatorsOverloading consiste in una semplice libreria che fornisce l'astrazione di lista concatenata e immutabile. Il progetto fornisce la classe astratta List (e la sua implementazione), che permette di manipolare liste concatenate, e la classe statica List che contiene dei metodi di utilità per creare una List<TValue> a partire dai suoi elementi di tipo TValue o per concatenare due liste dello stesso tipo. Ad esempio, la lista [1, 2, 3] può essere creata con le seguenti sintassi:

List<int> lst = List.Of(1, List.Of(2, List.Of(3)))

List<int> lst1 = List.Of(1, List.Of(2, List.Of(3, List.Nil<int>())))

List<int> lst2 = List.From(1, 2, 3)

Il metodo List.Append permette invece di concatenare due liste:

List.Append(List.From(1, 2, 3), List.Of(4, List.Of(5))) // = [1, 2, 3, 4, 5]

Scopo dell'esercizio è implementare l'overload degli operatori di confronto, cast, addizione e sottrazione con le sequenti semantiche:

  • == e != confrontano i valori delle liste, elemento per elemento
  • gli operatori >, <, >=, <=, confrontano le lunghezze delle due liste
  • l'operatore + concatena due liste (in maniera analoga al metodo List.Append)
  • l'operatore - rimuove tutti gli elementi della seconda lista di destra da quella di sinistra

Inoltre, dev'essere possibile effettuare le seguenti conversioni:

  • da array di TValue a List<TValue>, in maniera implicita

  • da valore di tipo TValue a List<TValue> (contenente un solo elemento!), in maniera implicita

  • da List<TValue> ad array di TValue, in maniera esplicita

Il test contenuto nella classe Program tenta di chiarire il comportamento della classe List<TValue>, nel caso in cui l'overload degli operatori sia stato implementato correttamente.

È sempre buona cosa riusare i metodi già forniti o la logica con cui sono stati implementati.

Esercizio 4 - Metodi estensione

Il progetto ExtensionMethods consiste in una semplice libreria che fornisce l'interfaccia IComplex per lavorare con i numeri complessi. L'interfaccia è volutamente minimale e delega l'implementazione delle varie operazioni ai metodi estensione contenuti nella classe ComplexExtensions.

Gli scopi dell'esercizio sono:

  • Implementare l'interfaccia IComplex nella/nelle maniere che si ritengono migliori

  • Implementare le operazioni sui numeri complessi, le cui firme sono presenti nella classe statica nella classe ComplexExtensions

Il test contenuto in ComplexExtensionsTests.cs tenta di chiarire il comportamento atteso per i metodi estensione suddetti. L'esercizio si può considerare concluso quando tutti i test terminano con successo.

Esercizio 5 - Delegati ed eventi

Il progetto DelegatesAndEvent consiste in una semplice libreria che fornisce l'astrazione di "lista osservabile". L'intefaccia IObservableList estende System.Collections.Generic.IList con la capacità della lista di generare eventi ogni volta che subisce una modifica.

L'esercizio fornisce già i delegati ListChangeCallback e ListElementChangeCallback. Il primo codifica la firma dei metodi che possono essere registrati per intercettare l'aggiunta/rimozione di elementi dalla lista. Il secondo codifica la firma dei metodi che possono essere registrati per intercettare la sostituzione di un elemento della lista.

Scopo dell'esercizio è implementare la classe ObservableList in maniera tale da generare gli eventi in maniera corretta.

Il test contenuto nella classe Program tenta di chiarire il comportamento atteso per le implementazioni dell'interfaccia IObservableList. Esso mostra inoltre come è possibile registrare ascoltatori di eventi per una specifica lista.

oop-lab-csharp's People

Contributors

aplacuzzi avatar gciatto avatar niccomlt avatar ssimoo avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.