Commit 8532d5
2026-06-08 11:36:12 lisa: C05: add Object Descriptions & Class Diagrams page (5th design tool) Class diagram (Animal example) + notation key, properties/methods/events incl. GUI events, links to data dictionary (attributes) and pseudocode (methods, Level 9). Added to home index under C5-1 and cross-linked from pseudocode page. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>| sd/C05/C05-home.md .. | |
| @@ 15,6 15,7 @@ | |
| - [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type) — the most common data-dictionary error: the Format column is a storage/display pattern, not a synonym for data type | |
| - [IPO Charts — Process Means Steps](/sd/C05/IPO%20Charts%20-%20Process%20Means%20Steps) — why the Process column must be numbered algorithm steps, not a label for the output | |
| - [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python) — write language-independent Structured English (`←`, `<>`, `ENDIF`), not Python-flavoured pseudocode | |
| + | - [Object Descriptions and Class Diagrams](/sd/C05/Object%20Descriptions%20and%20Class%20Diagrams) — the fifth design tool for OOP projects: a class's properties, methods and events, and how to read a class diagram (Level 7–9) |
| ## C5-2 — Design principles & UX | |
| /dev/null .. sd/C05/Object Descriptions and Class Diagrams.md | |
| @@ 0,0 1,148 @@ | |
| + | > **DRAFT** — under teacher review. |
| + | |
| + | # Object Descriptions and Class Diagrams |
| + | |
| + | The Hamilton and Alexandra College · Year 12 · 2026 |
| + | |
| + | If your solution uses **objects and classes**, the fifth design tool is the **object description**. VCAA defines it as a tool that *"describes all of the relevant properties, methods and events in an object or class."* A **class diagram** is the standard way to draw a whole set of object descriptions at once and show how the classes relate. |
| + | |
| + | This is a **Level 7+** tool in C5-1, and at **Level 9** you are also expected to write pseudocode for the methods inside your classes. |
| + | |
| + | > [!NOTE] |
| + | > **Only if you use OOP.** If your solution genuinely does not use classes and objects, you do not need object descriptions. But most SAT projects of any real size have at least a few classes — and a class diagram is the clearest way to show them. |
| + | |
| + | --- |
| + | |
| + | ## Reading a class diagram |
| + | |
| + | Each box is a **class**. The top section lists its **attributes** (properties), the bottom section lists its **methods** (actions), and the arrows show **relationships** between classes. |
| + | |
| + | ```mermaid |
| + | --- |
| + | title: Animal example |
| + | --- |
| + | classDiagram |
| + | note "From Duck till Zebra" |
| + | Animal <|-- Duck |
| + | note for Duck "can fly<br>can swim<br>can dive<br>can help in debugging" |
| + | Animal <|-- Fish |
| + | Animal <|-- Zebra |
| + | Animal : +int age |
| + | Animal : +String gender |
| + | Animal: +isMammal() |
| + | Animal: +mate() |
| + | class Duck{ |
| + | +String beakColor |
| + | +swim() |
| + | +quack() |
| + | } |
| + | class Fish{ |
| + | -int sizeInFeet |
| + | -canEat() |
| + | } |
| + | class Zebra{ |
| + | +bool is_wild |
| + | +run() |
| + | } |
| + | ``` |
| + | |
| + | Read it like this: `Animal` is the **base class**. `Duck`, `Fish` and `Zebra` are all *a kind of* Animal, so each one **inherits** Animal's attributes (`age`, `gender`) and methods (`isMammal()`, `mate()`) and then adds its own. `Duck` adds `beakColor`, `swim()` and `quack()`; it doesn't have to redefine `age` because it already has it from `Animal`. |
| + | |
| + | --- |
| + | |
| + | ## The notation you need |
| + | |
| + | | Symbol | Meaning | |
| + | |---|---| |
| + | | `+` | **Public** — usable from outside the class | |
| + | | `-` | **Private** — usable only inside the class | |
| + | | `age : int` | An **attribute** and its **data type** | |
| + | | `isMammal()` | A **method** (an action the object can perform) | |
| + | | `isUpcoming() : bool` | A method and its **return type** | |
| + | | `Animal <|-- Duck` | **Inheritance** — "Duck *is a* Animal" | |
| + | |
| + | > [!TIP] |
| + | > Every attribute should have a **data type** and every method should show its **parameters and return type**. "`age`" alone is weak; "`+ age : int`" is design-ready. This is exactly the precision that lifts C5-1 from the middle bands into 7–9. |
| + | |
| + | --- |
| + | |
| + | ## Properties, methods — *and events* |
| + | |
| + | A class diagram shows properties and methods well. But VCAA object descriptions also include **events** — especially for **GUI objects** (buttons, text fields, menus). An event is something the object *responds to*, like a click. |
| + | |
| + | For a login button you might describe the object like this: |
| + | |
| + | | Aspect | Example for `btnLogin` (a button) | |
| + | |---|---| |
| + | | **Properties** | `caption` = "Log in", `enabled` = true | |
| + | | **Methods** | `setEnabled(state)` | |
| + | | **Events** | `onClick` → runs the *Validate User* process | |
| + | |
| + | So: the class diagram carries your properties and methods; for interface objects, add a short note or table documenting the **events** as well. |
| + | |
| + | --- |
| + | |
| + | ## How it connects to your other design tools |
| + | |
| + | The object description is not an island — it ties the whole detailed design together: |
| + | |
| + | - **Properties ↔ data dictionary.** Every attribute is a field. `studentID : int` becomes a data-dictionary row with a type, size and format. See [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type). |
| + | - **Methods ↔ pseudocode.** At Level 9 you write pseudocode for each method. The `is_passing()` example on the pseudocode page is exactly a method from a class diagram, written out. See [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python). |
| + | - **Classes ↔ mock-ups and IPO charts.** The objects are what sit *behind* your screens and processes. |
| + | |
| + | --- |
| + | |
| + | ## Common mistakes |
| + | |
| + | ### Mistake 1: An object description with no methods |
| + | |
| + | > ~~A box listing only attributes~~ |
| + | |
| + | That is just a data dictionary in disguise. An object description must include the **methods** (and, for GUI objects, the **events**) — that is what makes it an *object*. |
| + | |
| + | ### Mistake 2: No visibility or data types |
| + | |
| + | > ~~`beakColor`, `swim`~~ |
| + | |
| + | Show whether each member is public (`+`) or private (`-`), give every attribute a **type**, and give every method its **parameters and return type**. |
| + | |
| + | ### Mistake 3: Classes drawn with no relationships |
| + | |
| + | If `Teacher` is a kind of `Student`, draw the inheritance arrow. A diagram of disconnected boxes hides the design thinking the arrows are meant to show. |
| + | |
| + | ### Mistake 4 (Level 9): A class diagram but no method pseudocode |
| + | |
| + | At Level 9 the methods in your diagram must be backed by pseudocode. A diagram on its own caps you below the top band. |
| + | |
| + | --- |
| + | |
| + | ## Check Your Understanding |
| + | |
| + | 1. In the Animal diagram, name two things `Duck` inherits from `Animal`, and one thing `Duck` adds of its own. |
| + | |
| + | >| **Inherits** (any two): `age`, `gender`, `isMammal()`, `mate()`. **Adds** (any one): `beakColor`, `swim()`, `quack()`. |
| + | |
| + | 2. What do `+` and `-` mean in front of an attribute or method? |
| + | |
| + | >| `+` means **public** (accessible from outside the class); `-` means **private** (accessible only inside the class). |
| + | |
| + | 3. Which design tool turns the *methods* in your class diagram into step-by-step logic — and at which level is it required? |
| + | |
| + | >| **Pseudocode**, required at **Level 9** (pseudocode for the functions and methods within your classes). See [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python). |
| + | |
| + | --- |
| + | |
| + | ## Credits |
| + | |
| + | - Class-diagram example adapted from the [Mermaid](https://mermaid.js.org/) documentation's *Animal* sample. |
| + | |
| + | --- |
| + | |
| + | ## See also |
| + | |
| + | - [VCAA Pseudocode — Not Python](/sd/C05/VCAA%20Pseudocode%20Not%20Python) — write the pseudocode for each method (Level 9) |
| + | - [Data Dictionary — Format is not Type](/sd/C05/Data%20Dictionary%20-%20Format%20is%20not%20Type) — each attribute is a data-dictionary field |
| + | - [Sketch vs Mock-up](/sd/C05/Sketch%20vs%20Mock-up) |
| + | - [C05 Resources](/sd/Resources/C05-Resources) |
| + | |
| + | ← Back to [C05 Home](/sd/C05/C05-home) · [VCE Software Development Hub](/sd/VCE%20Software%20Development%20Hub) |
| sd/C05/VCAA Pseudocode Not Python.md .. | |
| @@ 217,6 217,7 @@ | |
| ## See also | |
| - [IPO Charts — Process Means Steps](/sd/C05/IPO%20Charts%20-%20Process%20Means%20Steps) — turn an IPO Process column into formal pseudocode | |
| + | - [Object Descriptions and Class Diagrams](/sd/C05/Object%20Descriptions%20and%20Class%20Diagrams) — the methods you write pseudocode for come from here |
| - [C05 Resources](/sd/Resources/C05-Resources) | |
| --- | |
