Projecte de disseny modular: FilmITB

Sumari

  1. Projecte de disseny modular: FilmITB
    1. Objectiu
      1. Metodologia de treball
      2. Menús
      3. Package ui
        1. Class AppState
        2. Class UI
        3. Class UserUI, FilmUI, SearchUi
      4. Package model
        1. Class Film, User
        2. FilmItb
      5. Creativitat (ampliació)
        1. Show statistics (Users)
        2. Recomended (Search)
      6. Joc de proves
      7. Test unitari
    2. Càlcul de la nota

Objectiu

Implementarem un programa per gestionar una plataforma de pel·lícules anomenada FilmITB
El programa tindrà una "interfície d'usuari" (a través de la línia de comandes), que mostrarà un menú en el que l'usuari triarà les diferent accions que permetran executar el nostre programa.
Les diferents tasques que FilmITB durà a terme són:

En aquesta pràctica s'avaluaran els continguts de la UF2-M03 i UF2-M05

Metodologia de treball

Menús

Welcome to FilmItb:
1: User
2: Films
3: Search
0: Exit

Cada una d'aquestes opcions ha de mostrar un altre submenú, amb les opcions de cada apartat.

Users:
1: Add user
2: Show my user
3: View users
4: Update user
5: Delete user
6: Change User
7: Show statistics
0: Return to main menu
Films:
1: Add film
2: Show films
3: Delete films
4: Watch films
5: View watched films
6: Add film to favorites
7: Show favorites
8: Show likes per film
0: Return to main menu
Search methods:
1: By title
2: By director
3: By main actor
4: By genere
5: By length
6: Not watched
7: Recomended
0: Return to main menu

Package ui

Class AppState

No tindrem variables globals, com ara currentUser, si no que considerarem que aquest tipus de variables formaran part de l'estat de l'aplicació i estaran dins de la classe AppState.

Class UI

Conté el main on es declara l'únic scanner del projecte. El mètode main només farà una única acció, cridar al mètode start() de la classe UI.
El mètode start ha de fer les inicialitzacions necessàries, mostrar el menú i llegir l'opció escollida.

Class UserUI, FilmUI, SearchUi

Aquestes classes seran les responsables de mostrar el submenú i recollir la opció del submenú.
Implementarem un mètode per cada opció del menú, aquests mètodes mostraran la informació a l'usuari i la recolliran les dades, però en cap cas manipularan les dades (no en faran gestions ni càlculs)
Exemple:

private fun addFavorites() {
        println("Enter a favorite film")
        val title = sc.nextLine()
        filmItb.addFavorite(title, currentUser!!)
}

Package model

Class Film, User

Aquestes són les classes que ens permetran crear pel·lícules i usuaris
Aquestes classes fonamentals és possible que pràcticament no tinguin mètodes.
Consta de la constructora de la classe. Serà necessari que indiquis que són data classes, això ens permetrà accedir als diferents paràmetres i altres avantatges que veurem més endavant.

FilmItb

Tindrà la llista de pel·lícules i la llista d'usuaris. Pràcticament aquí hi trobarem tots els mètodes que operen amb les dades (la lògica de negoci).
Tindrem una única instància d'aquesta classe, que l'afegirem a l'appState

Creativitat (ampliació)

Show statistics (Users)

Aquí sou vosaltres qui heu de decidir les dades que voldreu mostrar. Heu d'intentar que sigui informació útil i interessant. Volem que FilmITB sigui usable i per tant no desenvoluparem un apartat per no ser consultat.

Heu de dissenyar i implementar un algorisme per recomanar pel·lícules, és una de les funcions més importants, ja que sabem que l'usuari no vol perdre temps cercant què mirar i també sabem que si l'usuari mira pel·lícules que no li agraden, estarà poc satisfet i acabarà abandonant la nostre plataforma.
Per tant cal dissenyar un algorisme que retorni un llistat de pel·lícules que li agradin a l'usuari.

Joc de proves

Per tal de que pugueu testejar la vostra aplicació us proporcionem un joc de proves.
El joc de proves complet conté l'entrada i la sortida, el que no és complet només conté les entrades.
Podeu redirigir l'entrada de dades de la vostra pràctica per a què la llegeixi de l'arxiu. Per fer-ho heu de modificar "run configurations"

Al costat del menú de play on indica la classe de la qual es farà el run desplegueu el menú indicat amb la fletxeta. Clickeu a edit configurations i seleccioneu "redirect input from" i selecciona la ruta del joc de proves (només entrada, no el complet)

Joc Film Complet
Joc Film Proves
Joc Search Complet
Joc Search Proves
Joc d'Usuaris Complet
Joc d'Usuaris Proves

Tingueu en compte que aquest joc de proves és bàsic i no estan testejades totes les opcions, ni es contemplen tots els casos.

Test unitari

Cada una de les classes i funcions ha de tenir els testos unitaris pertinents i heu d'aconseguir tenir un 100% de coverage de tot el codi que no formi part de la interfície gràfica (package ui). Recordeu que fer els testos durant el desenvolupament us pot ser molt útil, no els deixeu pel final.

Aquesta part de la pràctica servirà per evaluar la UF2-M05.

Càlcul de la nota

Es valoraran els següents apartats que tindran la següent ponderació:

Per tenir la màxima puntuació en els diferents apartats és valorarà: