{
    "componentChunkName": "component---src-templates-docs-js",
    "path": "/old/03-assignments/03-assignment_3",
    "result": {"data":{"site":{"siteMetadata":{"title":"Linnéuniversitetet","language":"sv","courseCode":"1DV607"}},"mdx":{"fields":{"id":"593209c8-8578-58c7-a599-5a9f81d99fb9","title":"Assignment 3","slug":"/old/03-assignments/03-assignment_3"},"body":"var _excluded = [\"components\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Assignment 3\",\n  \"metaTitle\": \"Assignment 3 Tasks\",\n  \"metaDescription\": \"This is the meta description for this page\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, _excluded);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"This describes the task for the third assignment, perform all the steps in order. Be sure to document all assumptions and changes you are making. Also, be sure to specify who participated in the work and be prepared to answer any questions about your model.\"), mdx(\"p\", null, \"Please use English in your models and documents.\"), mdx(\"h2\", null, \"Goals\"), mdx(\"p\", null, \"In this assignment you are to show that you:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can understand and extend an existing object oriented codebase.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can refactor exising code to reduce code duplication, increase cohesion and decrease copuling.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can refactor exiting code to remove hidden/implicit dependencies.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can design and implement new features using GoF patterns.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can work within an architectural pattern (MVC) and know how to assign responsibilities within this architecture.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can deliver a working piece of software with high quality and use version management.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Understands how implementation and diagrams conform to eachother and the differences between the diagrams (class, sequence and object).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can design and implement more advanced features within the constraints of the architecture (Grade 3).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Can reuse the code at the architecural level and design and implement a new user interface (Grade 4).\")), mdx(\"h2\", null, \"Requirements for Grade 2 (Passing Grade)\"), mdx(\"h3\", null, \"Working Process\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You work with this grade in your project A3 in the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"main\"), \" branch.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Commit and push to your work regularly.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"When done you create a merge request for merging your \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"main\"), \"-branch to the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"release\"), \"-branch and select the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"A3 Grade 2\"), \" milestone.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tick the corresponding check-boxes in the merge request. Do \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"not\"), \" close or merge, this is done by the course administration when the assignment is done.\")), mdx(\"h3\", null, \"Task\"), mdx(\"p\", null, \"You will continue the implementation and documentation of a Black Jack game. The design is similar to what we have done on the theory but it is not exactly the same. The focus is not on usability or a nice user interface but to have a robust and well-documented design that can handle change. In the provided code, you find a started but not a playable version of the game in Java. As there are many different variants of the rules one of the aims is to create a flexible design that supports different combinations of rules. There is also a class diagram that describes the packages, classes and the main relations in the implementation (note that there are dependencies in the implementation that are not shown in the diagram for readability purposes, e.g. there are many dependencies to the Card class). There is also a sequence diagram for one, not implemented, part of the game.\"), mdx(\"h4\", null, \"Requirements\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Build and run the game using gradle (it should run, but it\\u2019s not playable).\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Study the class diagram and the source code to understand the design of the game.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Implement the operation Game::Stand using the sequence diagram Game_Stand. The game should now be playable.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Remove the bad, hidden, dependency between the controller and view (new game, hit, stand)\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Design and implement a new rule variant for when the dealer should take one more card. The new variant is \", mdx(\"em\", {\n    parentName: \"li\"\n  }, \"Soft 17\"), \", use the same design pattern already present for \", mdx(\"em\", {\n    parentName: \"li\"\n  }, \"Hit\"), \". Soft 17 means that the dealer has 17 but in a combination of Ace and 6 (for example Ace, two, two, two). This means that the Dealer can get another card valued at 10 but still have 17 as the value of the ace is reduced to 1. Using the soft 17 rule the dealer should take another card (compared to the original rule when the dealer only takes cards on a score of 16 or lower).\", mdx(\"br\", {\n    parentName: \"li\"\n  }), \"Hint: this is a typical behaviour you would like to have automatic test cases for.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Design and implement a variable rule for who wins the game. This variation could, for example, change who wins on an equal score (in one implementation the Dealer wins, in the other the Player). The design should make it easy to add other variants without changing the Dealer. Use the same design pattern as used in the Soft 17 design.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The code for getting a card from the deck, show the card and give it to a player is duplicated in a number of places. Make a refactoring to remove this duplication and that supports low coupling/high cohesion (i.e. check how you can evaluate different solutions to the problem and select the one that gives the best result according to low coupling/high cohesion). The code that is duplicated is similar to this:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"Card c = deck.GetCard();\\nc.Show(true/false)\\nplayer.DealCard(c);\\n\")), mdx(\"ol\", {\n    \"start\": 8\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the Observer-pattern to send an event to the user interface that a player (human or dealer) has got a new card in his hand. When the event is handled the user interface should be \\\"redrawn\\\" to show the new hand (with the new card) and the game should be briefly paused to make the game a bit more exciting. The pausing code should be in the user interface (view or controller) and not in the model. You should design and implement the observer structure yourself and not use any library classes like \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"java.util.observer\"), \" etc. The pause should be when any player (dealer or human) gets a card.\", mdx(\"br\", {\n    parentName: \"li\"\n  }), \"For example, when starting the game the following \\u201Cpattern\\u201D of pauses should present in the user interface:\")), mdx(\"pre\", null, mdx(\"code\", {\n    parentName: \"pre\"\n  }, \"Dealer:\\nPlayer: c1 (player gets the first card)\\n*pause*\\nDealer: c1 (dealer gets the first card)\\nPlayer: c1\\n*pause*\\nDealer: c1\\nPlayer: c1, c2 (player gets the second card)\\n*pause*\\nDealer: c1, c2 (dealer gets the second card)\\nPlayer: c1, c2\\n\")), mdx(\"p\", null, \"In this example video, of \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://youtu.be/IU8XcGIgPA8\"\n  }, \"a graphical user interface to the black jack game\"), \", these pauses are used to animate the cards and play a sound.\"), mdx(\"ol\", {\n    \"start\": 9\n  }, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Update the class diagram to reflect the changes you make (it is not necessary to recreate the whole diagram only the parts that have been affected by your changes).\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Proper use of versioning: there should be a number of commits (at least 20) that shows a natural progression of the application. \\\"Big bang\\\" delivery will result in a failed submission.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use of gitlab build pipeline, gradle and quality-tests. Build using gradle regularley, fix any quality issues. Do not change the build-pipeline.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"You are free to add additional automatic tests of your code.\")), mdx(\"h4\", null, \"Deliverables\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Everything should be neatly available in your branch as per the working process.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Source code that can be immediately built and run by gradle. Do not add the compiled java files i.e. \\xB4.class\\xB4 files, project files or other things to the project. There is a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".gitignore\"), \" that should cover most things but you may be working in a special environment, os etc. so take care. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"git rm\"), \" is your friend.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"a README.md that explains usage of your application and if there are any parts missing.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"a design.md that shows your updated class diagram and any text needed to explain the design.\")), mdx(\"h2\", null, \"Requirements for Grade 3\"), mdx(\"h3\", null, \"Working Process\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You work with this grade in your project A3\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Create a new branch \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"based on your \", mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"main\"), \"-branch\"), \" named \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"grade_3\"), \" this ensures that you can continue to work from where you handed in for grade 2. It is simplest to create this new branch using gitlab.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Do not forget to switch branch e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"git checkout grade_3\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Commit to your work regularly to your working branch, you should \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"not commit anything more to the main branch\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"When done you create a merge request for merging your final \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"grade_3\"), \"-branch to the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"release\"), \"-branch and select the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"A3 Grade 3\"), \" milestone.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tick the corresponding check-boxes in the merge request. Do \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"not\"), \" close or merge, this is done by the course administration when the assignment is done.\")), mdx(\"h3\", null, \"Task\"), mdx(\"p\", null, \"You will continue the implementation and documentation of a Black Jack game. The focus is to implement some additional patterns to gain further flexibility.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Grade 2 must be done.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Expand the application by adding the following requirements.\")), mdx(\"h4\", null, \"Requirements\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the design pattern Abstract Factory to offer some \\u201Cfinished\\u201D rule factories for different rule combinations. Parameterize the Game class in the constructor with the factory to use.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Use the design pattern Visitor to enable the view to print what rules are used at the start of the game. The model classes shoul not have any form of \\u201Ctype\\u201D-attribute (string, enum, int etc) or use some form of reflexion (i.e. print the class name).\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"The two views implementations seems to have things in common. Design and implement a solution to minimise duplication.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Update the class diagram.\")), mdx(\"h4\", null, \"Deliverables\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Everything should be neatly available in your branch as per the working process.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Source code that can be immediately built and run by gradle. Do not add the compiled java files i.e. \\xB4.class\\xB4 files, project files or other things to the project. There is a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".gitignore\"), \" that should cover most things but you may be working in a special environment, os etc. so take care. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"git rm\"), \" is your friend.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"a README.md that explains usage of your application and if there are any parts missing.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"a design.md that shows your class diagram and any text needed to explain the design.\")), mdx(\"h2\", null, \"Requirements for Grade 4\"), mdx(\"h3\", null, \"Working Process\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"You work with this grade in your project A3\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Create a new branch \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"based on your \", mdx(\"inlineCode\", {\n    parentName: \"strong\"\n  }, \"main\"), \"-branch\"), \" named \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"grade_4\"), \" this ensures that you can continue to work from where you handed in for grade 2. It is simplest to create this new branch using gitlab.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Do not forget to switch branch e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"git checkout grade_4\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Commit to your work regularly to your working branch, you should \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"not commit anything more to the main branch\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"When done you create a merge request for merging your final \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"grade_4\"), \"-branch to the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"release\"), \"-branch and select the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"A3 Grade 4\"), \" milestone.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Tick the corresponding check-boxes in the merge request. Do \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"not\"), \" close or merge, this is done by the course administration when the assignment is done.\")), mdx(\"h3\", null, \"Task\"), mdx(\"p\", null, \"You should design and implement a new view. This view should \", mdx(\"em\", {\n    parentName: \"p\"\n  }, \"not\"), \" be a console based view. You are free to use any libraries or frameworks.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Grade 2 and grade 3 must be done\")), mdx(\"p\", null, \"Example video of a \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://youtu.be/IU8XcGIgPA8\"\n  }, \"XNA based graphical user interface to the black jack game\")), mdx(\"h4\", null, \"Requirements\"), mdx(\"ol\", null, mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Design and implement a new (not console based) user interface (view/controller) to the game, for example using Swing, WPF, OpenGL, XNA or a web-based variant (you are free to convert it to another language than C#/Java if you want). Use as much of the present design as possible but change it if it is needed, i.e. try to keep the model intact.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"It should be possible to build and run the application using gradle.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Construct a class diagram over the application.\"), mdx(\"li\", {\n    parentName: \"ol\"\n  }, \"Write a short report on the conversion, what went well, what needed to be changed, why and how was the change made.\")), mdx(\"h4\", null, \"Deliverables\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Everything should be neatly available in your branch as per the working process.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Source code that can be immediately built and run by gradle. Do not add the compiled java files i.e. \\xB4.class\\xB4 files, project files or other things to the project. There is a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".gitignore\"), \" that should cover most things but you may be working in a special environment, os etc. so take care. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"git rm\"), \" is your friend.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"a README.md that explains usage of your application and if there are any parts missing.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"a design.md that shows your class diagram and any text needed to explain the design.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"a report.md that contains the report.\")));\n}\n;\nMDXContent.isMDXComponent = true;","tableOfContents":{"items":[{"url":"#goals","title":"Goals"},{"url":"#requirements-for-grade-2-passing-grade","title":"Requirements for Grade 2 (Passing Grade)","items":[{"url":"#working-process","title":"Working Process"},{"url":"#task","title":"Task","items":[{"url":"#requirements","title":"Requirements"},{"url":"#deliverables","title":"Deliverables"}]}]},{"url":"#requirements-for-grade-3","title":"Requirements for Grade 3","items":[{"url":"#working-process-1","title":"Working Process"},{"url":"#task-1","title":"Task","items":[{"url":"#requirements-1","title":"Requirements"},{"url":"#deliverables-1","title":"Deliverables"}]}]},{"url":"#requirements-for-grade-4","title":"Requirements for Grade 4","items":[{"url":"#working-process-2","title":"Working Process"},{"url":"#task-2","title":"Task","items":[{"url":"#requirements-2","title":"Requirements"},{"url":"#deliverables-2","title":"Deliverables"}]}]}]},"parent":{"relativePath":"old/03-assignments/03-assignment_3.md"},"frontmatter":{"metaTitle":"Assignment 3 Tasks","metaDescription":"This is the meta description for this page","fullWidth":null}},"allMdx":{"edges":[{"node":{"fields":{"slug":"/forelasningar-2026","title":"Föreläsningar 2026"}}},{"node":{"fields":{"slug":"/","title":"Objektorienterad analys och design med UML (1DV607)"}}},{"node":{"fields":{"slug":"/laborationer-2026","title":"Laborationer 2026"}}},{"node":{"fields":{"slug":"/old","title":"Old"}}},{"node":{"fields":{"slug":"/forelasningar-2026/00-tema-2-objektorienterad-analys-och-uml","title":"Tema 2 – Objektorienterad analys och modellering med UML"}}},{"node":{"fields":{"slug":"/forelasningar-2026/00-tema-3-objektorienterad-design-med-uml","title":"Tema 3 – Objektorienterad design med UML"}}},{"node":{"fields":{"slug":"/forelasningar-2026/01-kursintroduktion-och-domanmodellering","title":"1. Kursintroduktion och domänmodellering"}}},{"node":{"fields":{"slug":"/forelasningar-2026/02-objektorienterad-analys-och-modellering","title":"2. Objektorienterad analys och modellering"}}},{"node":{"fields":{"slug":"/forelasningar-2026/03-uml-modellering","title":"3. Fortsatt modellering med UML"}}},{"node":{"fields":{"slug":"/forelasningar-2026/04-grasp","title":"4. GRASP"}}},{"node":{"fields":{"slug":"/forelasningar-2026/00-tema-1-grunderna","title":"Tema 1 – Grunderna i objektorienterad analys och design"}}},{"node":{"fields":{"slug":"/laborationer-2026/01-laboration-1","title":"Laboration 1 – Domänmodellering"}}},{"node":{"fields":{"slug":"/old/001-introduction","title":"Course Introduction"}}},{"node":{"fields":{"slug":"/old/01-information","title":"Course Information"}}},{"node":{"fields":{"slug":"/laborationer-2026/02-laboration-2","title":"Laboration 2"}}},{"node":{"fields":{"slug":"/old/02-theory","title":"Theory"}}},{"node":{"fields":{"slug":"/old/03-assignments","title":"Assignments"}}},{"node":{"fields":{"slug":"/old/01-information/01-welcome","title":"Welcome to the Course"}}},{"node":{"fields":{"slug":"/old/01-information/registration","title":"Course Registration"}}},{"node":{"fields":{"slug":"/old/02-theory/01-intro_to_ooad","title":"Introduction to Object Oriented Analysis and Design"}}},{"node":{"fields":{"slug":"/old/01-information/grading","title":"Course Grading"}}},{"node":{"fields":{"slug":"/old/02-theory/03_software_architecture","title":"Software Architecture"}}},{"node":{"fields":{"slug":"/old/02-theory/04_mvc","title":"Model View Controller"}}},{"node":{"fields":{"slug":"/old/02-theory/02-domain_modeling","title":"Domain Modeling"}}},{"node":{"fields":{"slug":"/old/02-theory/06_grasp1","title":"GRASP 1"}}},{"node":{"fields":{"slug":"/old/02-theory/05_layers_components","title":"Layers & Components"}}},{"node":{"fields":{"slug":"/old/02-theory/07_grasp2","title":"GRASP 2"}}},{"node":{"fields":{"slug":"/old/02-theory/09_gof1","title":"GoF 1"}}},{"node":{"fields":{"slug":"/old/02-theory/10_gof2","title":"GoF 2"}}},{"node":{"fields":{"slug":"/old/02-theory/11_solid","title":"SOLID"}}},{"node":{"fields":{"slug":"/old/02-theory/08_grasp3","title":"GRASP 3"}}},{"node":{"fields":{"slug":"/old/02-theory/design_class_diagram","title":"UML Design Class Notation"}}},{"node":{"fields":{"slug":"/old/02-theory/design_class_relations","title":"UML Design Class Relations"}}},{"node":{"fields":{"slug":"/old/02-theory/design_object_diagram","title":"UML Object Diagram Notation"}}},{"node":{"fields":{"slug":"/old/02-theory/99-exercises","title":"Exercises"}}},{"node":{"fields":{"slug":"/old/02-theory/design_package_diagram","title":"UML Package Notation"}}},{"node":{"fields":{"slug":"/old/02-theory/domain_class_diagram","title":"UML Domain Model"}}},{"node":{"fields":{"slug":"/old/02-theory/reading-instructions","title":"Reading Instructions"}}},{"node":{"fields":{"slug":"/old/03-assignments/01-assignment_1","title":"Assignment 1"}}},{"node":{"fields":{"slug":"/old/03-assignments/02-assignment_2","title":"Assignment 2"}}},{"node":{"fields":{"slug":"/old/03-assignments/03-assignment_3","title":"Assignment 3"}}},{"node":{"fields":{"slug":"/old/03-assignments/04-yahtzee","title":"Yahtzee Assignment"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-a","title":"Övningsuppgifter del A"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-b","title":"Övningsuppgifter del B"}}},{"node":{"fields":{"slug":"/old/03-assignments/01-assignment_1/lending-system-problem-description","title":"Stuff Lending System Problem Description"}}},{"node":{"fields":{"slug":"/old/03-assignments/01-assignment_1/yacht-club-problem-description","title":"Yacht Club Problem Description"}}},{"node":{"fields":{"slug":"/old/old_template/videologgar","title":"Vlog"}}},{"node":{"fields":{"slug":"/old/old_template/codeblock/1-index","title":"Sub Page"}}},{"node":{"fields":{"slug":"/old/03-assignments/02-assignment_2/test_specification","title":"Test Specification"}}},{"node":{"fields":{"slug":"/old/old_template/codeblock","title":"Syntax Highlighting"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-a/01-hello-world","title":"Hello world"}}},{"node":{"fields":{"slug":"/old/old_template/ovningsuppgifter-del-a/02-simple-addition","title":"Enkel addition"}}}]}},"pageContext":{"id":"593209c8-8578-58c7-a599-5a9f81d99fb9"}},
    "staticQueryHashes": ["253607798","3706406642","710574383"]}