Difference between revisions of "Objektorienteret Programmering"

From Teknologisk videncenter
Jump to: navigation, search
(Projektuge)
 
(32 intermediate revisions by the same user not shown)
Line 1: Line 1:
==Tirsdag  d. 21. November==
+
==Mandag==
Jeg er syg idag, så vi laver lige en anderledes undervisningsdag. I skal læse en web-tutorial igennem, og derefter lave en lille opgave.  
+
<h3><i>Opsummering</i></h3>
 +
- Lav en class med 3 methods og 3 properties og 1 constructor. Vælg selv typer.
 +
- Lav en class som nedarver fra den første class og overrider en af dens funktioner.
 +
- Sørg for at begge classes bruger getters og setters
  
[http://csharp.net-tutorials.com/classes/introduction/ Begynd Her] og fortsæt med at læse igennem til og med "interfaces". Husk at prøve koncepterne af i Visual Studio imens i læser. Vi tager en opsamling på koncepterne imorgen.
+
<h3><i>Overloading</i></h3>
  
Når i bliver færdige med at læse, så begynd at kode følgende opgave (alene, eller sammen med en anden):
+
Lav din egen Math class
 +
Lav en plus funktion der tager imod to tal og returnerer summen af dem.
 +
Lav 2 overloads, en der tager imod to float værdier og en der tager imod to int værdier
 +
Gør det samme for de andre regnearter (minus, gange, dividere)
 +
til sidst, lav en overload som tager imod to strings og outputter summen af tallet i dem.
  
Lav kodestrukturen til et simpelt chatsystem (behøver bare at være lokalt på computeren). Der skal være følgende classes (men der gerne være flere):
+
<h3><i>Delegates</i></h3>
 +
[https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/ Mere info]
 +
- Lav en delegate som returnerer void og tager imod ingen parametre. Kald denne.
 +
- Lav en anden delegate som returnerer float og tager imod ingen parametre. Kald denne.
 +
- Lav en anden delegate som returnerer void og tager imod 3 parametere. Kald denne.
 +
- Udfordring: Lav et program som kan bruge de forskellige metoder i den Math class i lavede i Overloading. Den IKKE kalde nogen af metoderne direkte, kun igennem delegates.
  
User - Indeholder oplysninger om de forskellige brugere og hvilke beskeder de har modtaget fra andre. Eksempler på værdier kunne være: "String name" "List<Message> messages"
+
Eksempel fra formidlingen:
 
+
<source lang="CSharp">class Program
Message - Oplysninger om de beskeder der er blevet sendt på netværket. Beskeden skal, udover beskedteksten, have oplysninger om hvilket rum den bliver sendt ud i, og hvem der har sendt beskeden.
 
 
 
Room - Oplysninger om de forskellige chatrooms. Her tænker jeg at hvert rum skal have et navn, og en liste over de forskellige Users der er til stede i det givne rum.
 
 
 
Send mig en mail på "mach@mercantec.dk" hvis i har spørgsmål.
 
 
 
==Kode fra Onsdag d. 22. November==
 
<source lang=Csharp>
 
using System;
 
using System.Collections.Generic;
 
using System.Linq;
 
using System.Text;
 
using System.Threading.Tasks;
 
 
 
namespace OOP2
 
{
 
    class Machine
 
 
     {
 
     {
         //Some code
+
         delegate string GreetingDelegate(string s);
    }
+
        static void Main(string[] args)
 +
        {
 +
            GreetingDelegate del = sayIt;
 +
            Console.WriteLine(del("I'd like a soda"));
 +
            del = sayItPolitely;
 +
            Console.WriteLine(del("I'd like a soda"));
 +
        }
  
    class Vehicle : Machine
+
        static string sayIt(string s)
    {
+
        {
        protected string brand;
+
            return s;
         private double topSpeed;
+
         }
  
         public string getBrand()
+
         static string sayItPolitely(string s)
 
         {
 
         {
             return brand;
+
             return s + " please.";
 
         }
 
         }
  
         public void setBrand(string s)
+
         static void callbackExample(GreetingDelegate callback)
 
         {
 
         {
             this.brand = s;
+
             //some code
 +
            callback("I'm done!");
 
         }
 
         }
     }
+
     }</source>
  
    class Car : Vehicle
+
==Tirsdag==
    {
+
<h3><i>Access Modifiers</i></h3>
        private int numberOfDoors;
+
[https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/access-modifiers Mere Info]
  
        //Getters and Setters
+
<h3><i>Lambda Expressions</i></h3>
    }
+
[https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/lambda-expressions mere info]
 +
- Lav en Lambda Expression der tager imod en int og returnerer tallet fordoblet. Gem i en passende delegate og kør.
 +
- Lav en Lambda Expression der tager imod en 3 floats og returnerer summen. Gem i en passende delegate og kør.
 +
- Lav en Lambda Expression der ikke tager imod noget og returnerer "Hello World". Gem i en passende delegate og kør.
  
    class Motorcycle : Vehicle
+
<h3><i>Anonymous Methods</i></h3>
    {
+
[https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/statements-expressions-operators/anonymous-methods mere info]
        private double handlebarWidth;
 
  
        public Motorcycle()
 
        {
 
            brand = "Harley";
 
        }
 
        //Getters and Setters
 
    }
 
}
 
  
 +
[https://goo.gl/forms/fKMoartsN6OvJbwB3 Link til Test]
  
namespace OOP2
+
==Onsdag==
{
+
<h3><i>Multithreaded</i></h3>
    class Spaceship
+
[https://www.tutorialspoint.com/csharp/csharp_multithreading.htm Mere Info]
    {
+
- Start med at prøve at lave en Thread og starte den. Print til Console.Writeline for at teste
        private double speed = 40;
+
- Lav et program der starter 10 forskellige tråde. Lad hver tråd outputte noget forskelligt, og se hvilken rækkefølge de bliver skrevet i.
        protected int barrelSize = 20;
+
- Lav din egen Thread class, som demonstreret i klassen.
 +
- Ekstra Opgave: Lav et gæt et tal spil, men med en tidsgrænse! Brug en tråd til at holde styr på tiden.
  
        public virtual int FireWeapon()
+
<h3><i>Tasks</i></h3>
        {
+
[https://docs.microsoft.com/en-us/dotnet/standard/parallel-programming/task-based-asynchronous-programming Mere Info]
            Console.WriteLine("You fired " + barrelSize + " shots!");
+
- Lav en Task og få den til at køre.
            return 0;
+
- Lav en Task med en returnværdi og få den til at køre, skriv returværdien til konsollen.
        }
 
    }
 
  
    class HeavySpaceship : Spaceship
+
==Torsdag==
    {
+
<h3><i>UML Class Diagrams</i></h3>
        private int secondBarrelSize = 10;
+
[https://www.ibm.com/developerworks/rational/library/content/RationalEdge/sep04/bell/index.html Mere info]
       
+
- Tegn et UML Class Diagram der beskriver et objekt du har på dit værelse. Giv det passende metoder og properties.
    }
+
- Giv en klassekammerat dit diagram. Ud fra det alene skal personen forsøge at implementere din klasse så godt som muligt.
}
+
- Find et tidligere projekt du har lavet på studiet eller på arbejdet. Forsøg at beskrive dit projekt med et UML Class Diagram.
  
 +
Derefter, prøv om i kan implementere [https://www.dropbox.com/s/qbqqaimv86h64s7/download.png?dl=0 denne]
  
class Pupil
+
[https://goo.gl/forms/RzFe1DnYDlSCC1LP2 Link til Test]
    {
 
        protected string name;
 
        protected int age;
 
        protected double average;
 
  
        public Pupil(string name, int age, double average)
+
==Fredag==
        {
+
<h3><i>Getting started programming</i></h3>
            this.name = name;
+
- Find på et teoretisk produkt, og definer derefter en liste af klasser og metoder på baggrund af beskrivelsesmetoden.
            this.age = age;
 
            this.average = average;
 
        }
 
    }
 
  
    class UnivertyPupil : Pupil
+
==Projektuge==
    {
+
Husk at tilføje @adamdanyx som collaborator på dit repo (hvis du bruger GitHub)
        public UnivertyPupil(string uName, int age, double average) : base(uName, age, average)
+
- Solo-Grupper
        {
+
- Afleveres senest fredag klokken 11
        }
+
- Evalueres som skriftlig eksamen
    }
 
</source>
 
  
==Opgavebeskrivelse Onsdag==
+
Formelle Krav til Aflevering:
I skal lave en Zoologisk Have applikation
+
- Et GIT Repo med et kodeprojekt.
Der SKAL være disse to klasser:
+
- Et Før- og Efter UML Class Diagram
Zoo
+
- En udførlig Readme.md
Animal
+
- Kommentering der forklarer jeres løsning
  
Jeg skal være i stand til at spørge et objekt af classen Zoo om at give mig et array med alle dyr i parken.
+
Formelle Krav til Project Proposal:
 +
- 3 siders dokument indeholdende
 +
-  - Produktbeskrivelse
 +
-  - Motivation
 +
-  - UML Class Diagram
 +
- 4 emner vi har gennemgået i kurset (mindst 2 fra uge 2)
  
Som øvelse, så skal hver art af dyr være sin egen unikke klasse.
+
Uge 1
 +
- Inheritance
 +
- Abstract Classes
 +
- Interfaces
 +
- Incapsulation
  
Tilføj features efter eget ønske (spørg om alle dyr med en bestemt højde, alle dyr med vinger, alle dyr som hedder "Georg")
+
Uge 2
 +
- Overloading
 +
- Overriding
 +
- Delegates
 +
- Anonymous Methods ( evt. incl. Lambda)
 +
- Multithreading

Latest revision as of 12:59, 15 January 2018

Mandag

Opsummering

- Lav en class med 3 methods og 3 properties og 1 constructor. Vælg selv typer.
- Lav en class som nedarver fra den første class og overrider en af dens funktioner.
- Sørg for at begge classes bruger getters og setters

Overloading

Lav din egen Math class Lav en plus funktion der tager imod to tal og returnerer summen af dem. Lav 2 overloads, en der tager imod to float værdier og en der tager imod to int værdier Gør det samme for de andre regnearter (minus, gange, dividere) til sidst, lav en overload som tager imod to strings og outputter summen af tallet i dem.

Delegates

Mere info

- Lav en delegate som returnerer void og tager imod ingen parametre. Kald denne.
- Lav en anden delegate som returnerer float og tager imod ingen parametre. Kald denne.
- Lav en anden delegate som returnerer void og tager imod 3 parametere. Kald denne.
- Udfordring: Lav et program som kan bruge de forskellige metoder i den Math class i lavede i Overloading. Den må IKKE kalde nogen af metoderne direkte, kun igennem delegates.

Eksempel fra formidlingen:

class Program
    {
        delegate string GreetingDelegate(string s);
        static void Main(string[] args)
        {
            GreetingDelegate del = sayIt;
            Console.WriteLine(del("I'd like a soda"));
            del = sayItPolitely;
            Console.WriteLine(del("I'd like a soda"));
        }

        static string sayIt(string s)
        {
            return s;
        }

        static string sayItPolitely(string s)
        {
            return s + " please.";
        }

        static void callbackExample(GreetingDelegate callback)
        {
            //some code
            callback("I'm done!");
        }
    }

Tirsdag

Access Modifiers

Mere Info

Lambda Expressions

mere info

- Lav en Lambda Expression der tager imod en int og returnerer tallet fordoblet. Gem i en passende delegate og kør.
- Lav en Lambda Expression der tager imod en 3 floats og returnerer summen. Gem i en passende delegate og kør.
- Lav en Lambda Expression der ikke tager imod noget og returnerer "Hello World". Gem i en passende delegate og kør.

Anonymous Methods

mere info


Link til Test

Onsdag

Multithreaded

Mere Info

- Start med at prøve at lave en Thread og starte den. Print til Console.Writeline for at teste
- Lav et program der starter 10 forskellige tråde. Lad hver tråd outputte noget forskelligt, og se hvilken rækkefølge de bliver skrevet i.
- Lav din egen Thread class, som demonstreret i klassen.
- Ekstra Opgave: Lav et gæt et tal spil, men med en tidsgrænse! Brug en tråd til at holde styr på tiden. 

Tasks

Mere Info

- Lav en Task og få den til at køre.
- Lav en Task med en returnværdi og få den til at køre, skriv returværdien til konsollen.

Torsdag

UML Class Diagrams

Mere info

- Tegn et UML Class Diagram der beskriver et objekt du har på dit værelse. Giv det passende metoder og properties.
- Giv en klassekammerat dit diagram. Ud fra det alene skal personen forsøge at implementere din klasse så godt som muligt.
- Find et tidligere projekt du har lavet på studiet eller på arbejdet. Forsøg at beskrive dit projekt med et UML Class Diagram.

Derefter, prøv om i kan implementere denne

Link til Test

Fredag

Getting started programming

- Find på et teoretisk produkt, og definer derefter en liste af klasser og metoder på baggrund af beskrivelsesmetoden.

Projektuge

Husk at tilføje @adamdanyx som collaborator på dit repo (hvis du bruger GitHub)

- Solo-Grupper
- Afleveres senest fredag klokken 11
- Evalueres som skriftlig eksamen

Formelle Krav til Aflevering:

- Et GIT Repo med et kodeprojekt.
- Et Før- og Efter UML Class Diagram
- En udførlig Readme.md
- Kommentering der forklarer jeres løsning

Formelle Krav til Project Proposal:

- 3 siders dokument indeholdende 
-  - Produktbeskrivelse
-  - Motivation
-  - UML Class Diagram
- 4 emner vi har gennemgået i kurset (mindst 2 fra uge 2)

Uge 1

- Inheritance
- Abstract Classes
- Interfaces
- Incapsulation

Uge 2

- Overloading
- Overriding
- Delegates
- Anonymous Methods ( evt. incl. Lambda)
- Multithreading