Henrik Høltzer (heho)
Software Construction - SWC 1.2 2D

Semester: 2.sem., forår 2023
Email: heho@zealand.dk

Materialer generelt:

Noter:

Object-Oriented Programming with C# (findes på GitHub her)
Getting Started
Programming - Part I
Programming, Part II
Object-Oriented Programming, Part I

Razor pages: PART 1: Razor Pages


Opgaver:

Razor Pages: RazorPages_Exercises.docx
Unsolved exercise projects (Razor Pages - VS2019)
Solved exercise projects (Razor Pages - VS2019)

 

Video

LinkedIn Learning (Lynda.com) (Gratis adgang; tilmeld med din skole e-mail konto: https://www.linkedin.com/learning/activate) (SWC Lynda.com Playlist)

MS Academy: C# Fundamentals for absolute beginners

 

 

Link til 1. semester: Software Construction - SWC 1.1 1D

Uge Emner Materialer Opgaver
5-6 Jeg gennemgår prøve-opgaverne og laver lidt "opsamling"

Brush Up
- Razor Pages

Razor Pages Arkitektur illustrationer:
RazorArchitecture.docx
RazorArchitecture(Req-Res).docx
RazorArchitecture(Service).docx
RazorArchitecture(Handler part1).docx
RazorArchitecture(Handler part2).docx

Prøveopgaver:
Januar 2023:
BookingApp.pdf (Frisør Booking System)
BabyGymnastikforening.pdf

Januar 2022:
VagtplanSystem.pdf
VineCoolerSystem.pdf

Eksempel:

ScrumViewer.zip

Exercise:
UserStoriesPart1.pdf
UserStoriesPart2.pdf
UserStoriesPart3.pdf

Solutions:
UserStoriesPart1.zip
UserStoriesPart2.zip
UserStoriesPart3.zip

7 Brush Up (cont.),
Inheritance
Polymorphism
Interface


Inheritance (Arv), Interface + Abstract class:
Noter: s.111-122


Slides: Inheritance and Polymofism


Morgen opgave (tirsdag)
Diskuter i grupperne følgende:
Hvad er en Class, en Abstract Class og et Interface?
Hvad er forskellen?
Hvornår benyttes de?
Hvordan implementeres de?
Hvordan illustreres de i et UML - klassediagram
 
Hvad er Arv?
Hvordan implementeres den?
Hvordan illustreres den i et UML klassediagram?
 
Kan man implementere flere interfaces samtidigt?
Kan man nedarve fra flere klasser samtidigt (multipel nedarvning)?
Kan man både implementere (implement) et interface og arve (extends) fra en klasse samtidigt?

Eksempel:
TypeOfTest.zip (kode vist i klassen)


Morgen opgave
(torsdag)
Diskuter i grupperne følgende:
Hvad er protected (sammenlign med private og public)
Hvornår benyttes det? - giv et eksempel.
Hvad er virtual og override?
Hvornår benyttes de?
Hvad er polymorfi? - giv et eksempel.
Hvad er et type-cast? og hvornår benyttes det? - giv et eksempel.
Hvis man prøver at type-caste en reference til en forkert type, kastes en "InvalidCastException"
Hvordan kan man teste om en reference peger på et objekt af en bestemt type? - vis eksempler

Exercise:
ScrumViewerArv.pdf
BrushUp

ISpeak (Philosopher)

OOP.2.7


Solutions:
ISpeak.zip

8.1
21/02
Error/Exception
Unit Test

Exceptions:
Noter: s.129-133
Exceptions and Exception Handling in C#

MSDN: Best Practices for Exceptions

C# Note s. 262-276 (Unit Test)
Unit Testing (Power point)

LinkedIn.com/learning

Morgen opgave (tirsdag)
Diskuter i grupperne følgende:
Hvad er en Exception?
Hvad benyttes de til?
Hvordan kastes en Exception?
Hvordan gribes en Exception?

Hvad er en Unit Test?
Hvad forstås ved Arrange/Act/Assert?
Hvad skal testes i en unittest?
Hvordan testes? - hvad er class Assert?
Hvordan testes for Exceptions?

Eksempel:
TryingUnitTesting.zip (kode vist i klassen)

Exercise:
Exceptions-Stack

Exceptions-UnitTest

Model klasse med betingelser (constraints)
Testing

C# Programming Exercises Pro.3.10-11 (findes på GitHub her)
Pro 3.10-11 (Unittest + Exceptions)
TestExampleA.zip
TestExampleB.zip


C#-Projects:
MyStack.zip

Solutions:

TestExampleA-Solution.zip

8.2
23/02

Stack ADT (Abstract Data Type)
Generics
Queue (ADT) Using Collections


Generics:
Noter: s.194-207


Morgen opgave (torsdag)
Diskuter i grupperne:
Hvad er Unit test egentligt?.
Hvad er en god unit test?
Hvad betyder [TestClass], [TestMethod] og [TestInitialize]
Hvad er grænseværdi test og hvorfor skal man teste grænser?
Hvordan laves en grænseværdi test med Unittest i praksis?
Hvordan testes for Exceptions?
Diskuter hvordan i kan lave Unittest af Mystack!

Eksempel:
GenericFamilyRelation.zip (kode vist i klassen)


Exercise:
MyGenericStack

GenericCollectionsAndDictionarys


Solutions:
MyStackGenericUnitTest.zip (bemærk solution '.sln' ligger i MyStack)

9.1
28/02
IComparable / IComparer
Equals( ) / GetHashCode( )
Collections:
Noter: s.223-227


Collections-Overview
An Overview Of System.Collections.Generic
MSDN: IComparable
MSDN: IComparer
Microsoft docs: Use the IComparable and IComparer ...

Basic Sorting Algorithms In C#

Video:

Visualization and Comparison of Sorting Algorithms

Morgen opgave (tirsdag): MystackDiskuter

Exercise:
CollectionsSort (Consol)
SortItems (6.a opgave i serien ItemsRazor) (Opdateret 20/03/2023)

C#-Projects:

CollectionSortTest.zip

Solutions:
CollectionsSort.zip
ItemRazorV6.zip (løsning til opgave 6.a - Opdateret 20/03/2023)

9.2
02/03
Predicate Deligates
Anonymous functions
Lambda-expressions
IEnumerable / IEnumerator


Functions as parameters (Delegates, Predicates and Lambda):
Noter: s.208-218

Bemærk:

Predicate deligates og anonyme funktioner er lidt "tungt" stof ;)

CodeProject: Understanding Predicate Delegates

Videos:
Anonymous methods in c#

Lambda expression in c#
Func delegate in c# ** bemærk extra !! **


MSDN: Anonymous Methods
MSDN: Delegates
MSDN: Predicate <T> Delegate
MSDN: Lambda expressions
DotnetPerls: C# Lambdas

Morgen opgave (torsdag) - Diskuter:
Del1:
Hvad betyder "{handler?}" i linie 1 (Razor Pages) og hvornår benyttes det?
Hvad er forskellen på 'asp-page' og 'asp-page-handler' og hvornår benyttes de?
Hvis en handler-metode skal have en parameter - hvordan får vi den sendt med?
Hvis vi på en Page har et inputfield til en søgestreng og vi ønsker at kalde en søgefunktion i en service-klasse -
   hvordan gør vi det?
Hvornår benyttes OnGet og hvornår benyttes OnPost?

Del2:
Hvornår skal man redefinere Equals (og HashCode-metoden)?
Hvordan gør man?
Find på et godt eksempel og afprøv det!
Hvornår benyttes IComparable?
Hvad er forskellen på IComparable og IComparable<Item>?
Hvornår benyttes ICompare?
Hvad er forskellen på IComparable og ICompare?


Exercise:
LambdaExpressions


C#-Projects:
DeligateTest.zip
PredicateDeligateTest.zip

Solutions:
LambdaExpressions.zip

10
LINQ LINQ:
Noter: s.232-241

WizIQ : LINQ - Language INtegrated Query (slides)
MSDN: Introduction to LINQ
MSDN: 101 LINQ Samples

Videos:
LINQ
Part 1 What is LINQ
Part 2 Writing LINQ queries
Part 3 Extensions Methods in C#
Part 4 LINQ Aggregate Functions
Morgen opgave (tirsdag): SearchFilterItemsLambda
(6.b. opgave i serien ItemsRazor) (Opdateret 21/03/2023)

Exercise:
SortSearchFilterItemsLINQ (7. opgave i serien ItemsRazor) (Opdateret 21/03/2023)
LinqHotelExercice.zip

C#-Projects:
LinqTest.zip

Solutions:
LinqHotels.zip
ItemRazorV7.zip (løsning til opgave 7 - Opdateret 20/03/2023)
11   Razor Pages (fortsat)

Exercise:
CookiesAuthentificationItems (8. opgave i serien ItemsRazor) (Opdateret 20/03/2023)
GenericJsonFileServiceItems (9. opgave i serien ItemsRazor) (Opdateret 21/03/2023)
AuthorizationItems (10. opgave i serien ItemsRazor) (Opdateret 22/03/2023)

Solutions:
ItemRazorV8.zip (løsning til opgave 8 - Opdateret 21/03/2023)
ItemRazorV9.zip (løsning til opgave 9 - Opdateret 21/03/2023)
ItemRazorV10.zip (løsning til opgave 10 - Opdateret 22/03/2023)

12


Razor Pages (fortsat) Entity Framework Code First
PART 2: Razor Pages (Chap 3 - side 52 - 60)
https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/data-annotations
https://www.c-sharpcorner.com/article/dataannotations-in-depth/

Razor Pages (fortsat) Entity Framework Code First - Using Generics
PART 2: Razor Pages (Chap 4 - side 76 - 83)

https://www.c-sharpcorner.com/article/navigation-property-with-code-first-navigation-property-in-ef/

Exercise:
DbEFCodeFirstItems (11. opgave i serien ItemsRazor) (Opdateret 22/03/2023)
DbGenericServiceItems (12. opgave i serien ItemsRazor) (Opdateret 23/03/2023)

Solutions:
ItemRazorV11.zip (løsning til opgave 11 - Opdateret 23/03/2023)
ItemRazorV12.zip (løsning til opgave 12 - Opdateret 23/03/2023)

13 Projektoplæg (mangler opdatering)

Razor Pages (fortsat) Entity Framework Code First - Relations

Eager Loading of Related Data
Include&ThenInclude
AlsoInclude
Tracking vs. No-Tracking Queries

 

Adding Asynchronous Processing to ASP.NET Core 3.1 Razor Pages

Exercise:

EFCodeFirstRelationsLinqDaoItems (13. opgave i serien ItemsRazor) (Opdateret 24/03/2023)
EFCodeFirstRelationsIncludeItems (14. opgave i serien ItemsRazor) (Opdateret 24/03/2023)

Solutions:
ItemRazorV13.zip (løsning til opgave 13 - Opdateret 24/03/2023)
ItemRazorV14.zip (løsning til opgave 14 - Opdateret 24/03/2023)

14 Påskeferie    
15.1
11/4

Task, Thread, Asynchron

Microsoft:

Task-based Asynchronous Programming
Asynchronous programming


CodeProject: Asynchronous Programming in C# 5.0 using async and await

Async/Await - Best Practices in Asynchronous Programming

Slides: ProcessesAndThreads (PowerPoint)
Slides: AsynchronousProgramming (PowerPoint)

Joseph Albahari Threading in C#, part 1
Threads in C# (slides)

Example: TryThread | WriteToArray

Ekstra:
Joseph Albahari Threading in C#, part 2

Synchronization: Threads + monitors (slides)

Example: ThreadBank




Exercise
AsyncAwaitTaskItems (15. opgave i serien ItemsRazor) (Opdateret 24/03/2023)

 

Solutions:
ItemRazorV15.zip (løsning til opgave 15 - Opdateret 24/03/2023)


First thread | Solution
Adding threads to an existing program | Solution

Ekstra:
Producer-Consumer | solution

15.2
13/4

Dokumentation Code Documentation with Doxygen

Exercise O21:

  • Download and install Doxygen
  • Document some of your previons projects and try to extract documentation using Doxygen

15.2
13/4

16
18/4

Design Patterns

  • Decorator
  • Factory
  • Observer
  • Adapter
  • State
  • mm.

Lynda.com:
Foundations-Programming-Design-Patterns

Design patterns explained 
Illustrated designpatterns: 1 2 3 4 5

Code-project: Strategy Pattern-C#


DesignPatterns (Note)

Exercise :

PizzaShop

C#-Projects:
PizzaDesignPatterns (løsning til PizzaShop)

Ekstra   MS LiveShare: https://visualstudio.microsoft.com/services/live-share/

Forslag:
Når I sidder derhjemme og keder jer, så se evt.: https://www.linkedin.com/learning/git-essential-training-the-basics/view-the-commit-log?u=37487420

og læs: How to use Github in VS2019

og se evt følgende GitHub Video Tutorial (By Mohammed):
Gruppeopgave: MS-Live-Share.html
17-22 Projektarbejde

Projektaflevering: Tirsdag 30. maj kl. 12.00 Eksempler på tidligere opgaver:
GameMasterTools.pdf
Flygo og DriversApp (zip)
22-23 Eksamenslæsning
24 Eksamen: 12.-15. Juni 2023 Pensumliste