Skip to content
This repository has been archived by the owner on Jan 22, 2024. It is now read-only.

1dv021/examination-2-pre-2017

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

2 - Massor att göra

VIKTIGT! Innan du börjar arbeta med examinationsuppgiften är det viktigt att du lägger till examinationsuppgiftens repo till ditt repo för examinationsuppgiften. Se handledningen Praktisk examinationsuppgift för mer information.


OBS! OBS! OBS!

  • Detta är en obligatorisk och examinerande uppgift som du ska lösa helt på egen hand.
  • Du måste göra regelbundna "commits" och "pushes" av koden till ditt repo för uppgiften för att kursledningen ska kunna följa ditt arbetet med uppgiften.
  • Du ska kunna förklara alla konstruktioner och satser som din lösning av uppgiften innehåller.

Introduktion

I denna examinationsuppgift ska du slutföra ett knappt påbörjat projekt vars syfte att skapa förutsättningar att hjälpa dig komma ihåg saker, du ska mer konkret skriva kod för "att-göra"-listor.

Uppgift

Din uppgift är att implementera typerna ToDoItemoch ToDoList enligt ställda krav.

OBS! Tänk igenom hur typerna hanterar medlemmar (egenskaper och metoder) för att undvika att objekts tillstånd förändras på ett icke önskvärt sätt (d.v.s. undvik t.ex. "privacy leakish" beteenden).

Typen ToDoItem

Konstruktor

Vid instansiering av objekt av typen ToDoItemska det vara möjligt att skicka med en sträng som beskriver uppgiften, ett Date-objekt innehållande förfallodatumet samt eventuellt ett Date-objekt innehållande genomförandedatumet.

Egenskaper

Egenskap Typ Beskrivning Krav
text string Sätter/ger texten på uppgiften. 1 till 50 tecken.
dueDate Date Sätter/ger förfallodatumet för uppgiften. Date-objekt med giltigt datum.
finishedDate Date, undefined Sätter/ger genomförandedatumet för uppgiften. Date-objekt med giltigt datum eller undefined.
isDone boolean Ger ett värde som indikerar om uppgiften är genomförd. "read-only"
isOverdue boolean Ger ett värde som indikerar om uppgiften är/blev försenad. "read-only"

Samtliga egenskaper ska implementeras med hjälp av "getters" och, vid behov, "setters". Det ska bara gå att tilldela egenskaperna värden som är av respektive egenskaps angivna typ(er). Vid försök att tilldela en egenskap ett värde som inte är av angiven typ ska ett undantag av typen TypeError kastas. Uppfylls inte andra ställda krav ska ett undantag av typen Error kastas.

Metoder

Egenskap Returtyp Beskrivning Krav
clone() ToDoItem Skapar ett nytt objekt som är en kopia av aktuell instans. Måste returnera en exakt kopia utan några som helst kopplingar till originalet.
toJson() string Konverterar aktuell instans till en JSON-sträng. Uppgifts text, förfallodatum och i förekommande fall genomförandedatum.
toString() string Returnerar en sträng representerande aktuell instans. Uppgift som är försenad ska inledas med '* ', annars med ' ', innan namnet på uppgiften och därpå följande datum separerade med mellanslag.

Samtliga metoder ska vara kopplade till typens prototyp.

Exempel

// uppgift som inte genomförd och inte försenad
let toDoItem = new ToDoItem('köpa julklappar', new Date(2032, 11, 24));
console.log(toDoItem.toString()); // OUTPUT: '  köpa julklappar 2032-12-24'

// uppgift som är genomförd i tid
toDoItem.finishedDate = new Date(2032, 11, 20);
console.log(toDoItem.toString()); // OUTPUT: '  köpa julklappar 2032-12-24 2032-12-20'

// uppgift som är genomförd men försent
toDoItem.finishedDate = new Date(2032, 11, 25);
console.log(toDoItem.toString()); // OUTPUT: '* köpa julklappar 2032-12-24 2032-12-25'

// uppgift som inte är genomförd och som är försenad
toDoItem = new ToDoItem('åka till OS i Brasilien', new Date(2016, 7, 21));
console.log(toDoItem.toString()); // OUTPUT: '* åka till OS i Brasilien 2016-08-21'

OBS! Datumformatet kan variera beroende på hur din dator är konfigurerad.

Typen ToDoList

Konstruktor

Vid instansiering av objekt av typen ToDoListska det vara möjligt att skicka med en sträng med listans namn, en sträng med listans färg (standardvärde 'yellow'), en array innehållande referenser till ToDoItem-objekt (standardvärde []).

Egenskaper

Egenskap Typ Beskrivning Krav
name string Sätter/ger namnet på listan. 1 till 30 tecken.
color string Sätter/ger färgen på listan. 1 till 20 tecken.
toDoItems ToDoItem[] Sätter/ger en array innehållande referenser till ToDoItem-objekt. Måste vara en array, tom eller enbart innehållande referenser till ToDoItem-objekt. Ska vara sorterad i på förfallodatum i stigande ordning.
hasOverdue boolean Ger ett värde som indikerar om listan innehåller en, eller flera, uppgifter som är/blev försenad(e). "read-only"

Samtliga egenskaper ska implementeras med hjälp av "getters" och, vid behov, "setters". Det ska bara gå att tilldela egenskaperna värden som är av respektive egenskaps angivna typ(er). Vid försök att tilldela en egenskap ett värde som inte är av angiven typ ska ett undantag av typen TypeError kastas. Uppfylls inte andra ställda krav ska ett undantag av typen Error kastas.

Metoder

Egenskap Returtyp Beskrivning Krav
add(toDoItem) Lägger till en ny uppgift till listan. Uppgifterna måste vara sorterad på förfallodatum efter att den nya uppgiften lagts till.
removeFinished() Tar bort alla uppgifter som är genomförda.
clone() ToDoList Skapar ett nytt objekt som är en kopia av aktuell instans. Måste returnera en exakt kopia utan några som helst kopplingar till originalet.
toJson() string Konverterar aktuell instans till en JSON-sträng. Uppgifts namn, färg och i förekommande fall uppgifter.
toString() string Returnerar en sträng representerande aktuell instans. Listans namn, som ska inleda listan, ska avslutas med ' *' om den innehåller uppgift som är försenad. Varje uppgift i listan ska sedan presenteras på enskilda rader.

Samtliga metoder ska vara kopplade till typens prototyp.

Exempel

let toDoItems = [
  new ToDoItem('köpa julklappar', new Date(2032, 11, 24)),
  new ToDoItem('åka till OS i Stockholm', new Date(2026, 7, 3))
];

// lista utan förseningar
let list = new ToDoList('Viktigt!', 'yellow', toDoItems);
console.log(list.toString());
// OUTPUT:
// Viktigt!
//   åka till OS i Stockholm 2026-08-03
//   köpa julklappar 2032-12-24

// lista med försenad uppgift
list.add(new ToDoItem('nyårsfest', new Date(2015, 11, 31), new Date(2016, 2, 2)));
console.log(list.toString());
// OUTPUT:
// Viktigt! *
// * nyårsfest 2015-12-31 2016-03-02
//   åka till OS i Stockholm 2026-08-03
//   köpa julklappar 2032-12-24

OBS! Datumformatet kan variera beroende på hur din dator är konfigurerad.

Tips

Genom att köra testerna som kommer med examinationsuppgiften kan du undersöka om koden du skrivit löst uppgiften (i alla fall enligt testerna, som inte är heltäckande...).

  • JSON.strinify() och JSON.parse() kommer till användning i samband med konvertering till respektive tolkning av JSON-strängar.
  • Date.toLocalDateString() kan vara lämplig att använda för att få en textbeskrivning, som är beroende på din dators landsinställningar, av datumdelen av ett Date-objekt.
  • Array.splice() kan användas då du vill ta bort ett element ur en array.

About

Examinationsuppgift 2. Grundstomme till uppgiften

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •