Moduler

Modul 1 Godkjenning

Screenshots og video opptak av modul 1 der jeg forklarer og viser læringsmålene til modulet ved bruk av programmet BlueJ. Hensikten med denne modulen var å lære bruken av programmet blueJ og Java klasser, objekter og metoder.

 

Nett: https://www.youtube.com/watch?v=V6qL7RDeeFA

Download: Modul 1 læringsmål video optakk

Screenshots:

 

Modul 2

Detter er screenshots fra modul 2. Brukt programmet BlueJ for å lage en «Coffe machine». Hensikten med modulen var å lage en egen kl

asse fra skrætsj, ved å bruke kunnskap lært i modul 1 og etter å ha lest kapittel 1 og 2.

Modul 3 

Læringsmål til Modul 3

Java:

forklare forskjellen på primitive og objekttyper:

primitive typer er bygd inn Java og er allerede definert i programmert, det er data typene som står i boka og jeg  har brukt på modul 1 – 3 så langt, int, double, boolean, flout, char, string etc. Primtive typer tenger ikke ha metoder. Objekttyper derimot er definert av klasser i java og klasser som brukerne selv har skrevet. verdier lagres direkte i primitive typer (variabel), men verdier i non-object typer lagres  som referanse til objektet.

kan skrive koder som lager nye objekter:

koder som lager nye nye objekter skrives slik:

Dette er skisse på kode som lager nye objekter.

public class  Classname () {

Classname objectname = new Classname ();

objectname1 = new Classname();

objectname2 = new Classname();

objectname3 = new Classname();

}

vi kan se en klar eksempel på «kode som lager nye objekter» i ClockDisplay. Hvor nye objekter blir laget av klassen NumberDisplay.

 

kan skrive kode som kaller metoder i samme objekt:

Jeg bruker samme eksempel brukt i boka for å forklare kode som kaller metoder i samme objekt.

I ClockDisplay klassen har en vi en metode som har private access i klassen, private void updateDisplay(); Denne methoden blir kalt i andre methoder  ved hjel av methode navn.

public Class ClockDisplay{

//field declaration

private String displayString;

//metode som kaller annen metode

public void timeTick(){

minutes.increment();

if(minutes.getValue() == 0) {

hours.increment();

}

//metod call

updateDisplay();

}

//metoden updateDisplay

private void updateDisplay(){

displayString = hours.getDisplayValue() + «:» + minutes.getDisplayValue();

}

}

Abstraksjon og modularisering:

Abstraksjon: er evnen  til å ignore detaljer av deler for å fokusere på den store problem (del). Tekniken med abstraksjon (også kalt divide and conquer på engelsk) går ut på å dele en stor problem til en mindre deler og se disse delene invdividuelt, de mindre delene kan også deles mer for å løse de enkelt, etter en del har blitt løst brukes denne delen for å løse neste del.

 

modularisering: er prosessen med å dele en hel elle

r sammenhengende del i forskjellige deler for å lage disse delene hver for seg og til slutt sette sammen disse delene for å danne en hel del igjen. Modularisering kan bruks i hverdagslige oppgaver, boka viser til en eksempel på hvordan modularisering kan brukes av ingeniører i bilindustrien for å lage de forskjellige bildelene.

abtraksjon er brukt i ClockDisplay og gir et eksempel på hvordan abstraksjon brukes i software.

Klassediagrammer og objektdiagrammer:

klassdiagram: i programmering viser alle k

lassene til et program,  hvordan disse klassene er koblet sammen, gir informasjon om kildekoden og viser det som er static view av en program.

objektdiagram: viser objekter når programmet er under execuation, objekdiagram viser alle fields som objektet har og hva som er lagret i disse filene.
class and objekt diagram of «coffe machine»:

 

 

kan bruke debuggeren i Bluej (video)

video: https://www.youtube.com/watch?v=w4_MC-yvg6U

Screen Recording (8-19-2017 6-07-00 PM)

 

Modul 5

 

Læringsmål                                        11.16.2017

   

Du har fullført modulen når du :

  • kan bruke verb/substantiv metoden til å finne ut
    • hvilke klasser du trenger for å løse et problem
    • og hvilke metoder klassene skal ha
  • kan bruke scenarier (evt. med CRC kort) til å sjekke at du har funnet klassene og metodene du trenger
  • vet hva et design pattern er

 

Se evt på verktøy for CRC kort, eller lag det på tavle, papir.  

 

 

Beskrivelse

This coffee machine should make a coffee for a user, the user can choose a type of coffee offered by the machine. the user can further choose to add some types of sugar and can choose between different milk types  to add to the coffee. the user is required to pay for the coffee by putting money in the machine.

 

Finner klasser

Etter å ha beskrevet systemet slik, er neste steg å gå gjennom beskrivelsen for å finne alle substantiver og verb. Substantiver i denne sammenhengen vil si klasser/objekter, mens verb referer til metoder. Alle substantiver blir skrevet i en tall mens verb blir skrevet i flertall, fra tidligere erfaring kan vi se at en klasse alltid skrives i entall, for eksempel Coffee og ikke Coffee’s. Grunnen til dette er at flere klasser kan man lage av flere instanser av en klasse.

 

Nouns (classes/objects) Verbs (methods)
coffee machine stores (coffee’s)

is given (coins)

coffe stores(types of coffee)

has(coffee price)

sugar stores (types of sugar)
milk stores  (types of milk)
customer chooses (coffee, sugar, milk)

payment

is given (refund)

 

Scenario:

La oss ta for oss en eksempel på scenario (use cases/brukerhistorier):

 

En kunde kommer til kaffemaskinen, kunden ønsker to kopp kaffe, en for han og en for kollega. Kunden vil ha kaffe cappucino selv mens kollegaen kun drikker kaffe espresso. Kunden vil ikke ha sukker i kaffen, men kun melk og kollegaen ønsker både sukker og melk i kaffe.

 

  • jeg begynner å tenke meg at maksinen må første vite hvilken kaffe kunden har valgt. Dermed kan man notere som ansvar på klass Kaffemaskin: forespørsel til kunde om å velge kaffe.  
  • Kunden kan ikke velge kaffetype uten å vite om hvilke kaffe maskinen kan lage. Dermed må maskinen vise alle kaffetyper den har. Jeg skriver i ansvar: lagrer en samling av kaffetyper. Da må den samarbeide med klasse Kaffe for å vite om de forskjellige kaffetypene. Klasse kaffe må da skrives i ansvarsområdet: tilbyr valg av forskjellige type kaffe.
  • Kunden velger da kaffe så skriver jeg i ansvar på Kaffemaskin: aksepterer kundens valg av kaffe.
  • I klass Kunde skriver jeg da  i ansvarsområdet: kan velge kaffetype og siden Kaffemaskin har en objekt til Kaffe og samarbeider meg begge Kunde og Kaffe, kan Kunde sende forespørsel om å velge kaffe til Kaffemaskin som videre sjekker med Kaffe hvilke kaffe som er tilgjengelige.
  • I Kaffemaskin skriver jeg i ansvarsområdet: sender forespørsel om detalj informasjon til Kaffe for å vite om kaffetype og I kaffe kan jeg skrive i ansvarsområdet: lagrer kaffe status (tomt/ikke tomt).

 

CRC kort:

 

CRC står for Class/Responsibilities/Collaborators. Det er viktig å gjøre denne prosessen med å lage CRC kort på papir og blyant og ikke med pc. Grunnen er at klassene samarbeider med hverandre om å hente informasjon og gjøre noen forandringer så det er det lurt å tegne klassene som samarbeider med hverandre nær hverandre. Hver klasse har egen boks, øverste i boksen står klassenavn, under klassenavn er ansvar klassen har og og til høyre for ansvar området er skrevet klassene som denne klassen samarbeider og det er samarbeids feltet.

 

Kaffemaskin

———————————————————-

Responsibilities

-forespørsel til kunde om å velge kaffe.

– lagrer en samling av kaffetyper

– forespørsel til kaffe om tilgjengelige kaffe

Collaborators

Kunde

Kaffe

 

Kunde

———————————————————-

-kan velge kaffetype

Kaffemaskin

 

Kaffe

——————————————————–

-tilbyr valg av forskjellige typer kaffe

-har kaffepris

-lagrer kaffe status

Kaffemaskin

 

Melk

———————————————————–

Kunde

 

Sukker

———————————————————–

Kunde

 

En klasse representerer en samling av lignende objekter. Objektet kan være ting, mennesker, sted, hendelse og konsepter som er relevant for systemet som lages. For eksempel i kaffemaskin vil klass representer, kaffe, sukker, melk og kunde. Ansvaret er alt klassen vet og gjør.  For eksempel klass Kaffe har kaffe, pris og kaffe status og det er hva Kaffe vet om. Men det den gjør er å tilby kaffe. Noen ganger har klasser en ansvar som de skal oppfylle men klarer ikke å gjøre det alene og derfor komme samarbeid inn i bildet. For eksempel Kaffemaskin gi kaffe til kunde men trenger å vite om de forskjellige kaffetypene. Samarbeid tar for seg en av disse to tingene en forespørsel om informasjonstilgang eller en om gjøre noe.

 

Design pattern

En design pattern forklarer en vanlig problem i softwareutvikling, og forklarer videre løsningen på dette problemet som kan brukes i mange forskjellige sammenhenger. For software design patterns, løsningen er en forklaring av lite sett av klasser og dere interaksjoner.

Struktur av en pettern

en forklaring av en pattern burde inneholde

  • a name
  • en forklaring av problemet som pattern referer til
    • intent, motivation and applicability
  • en forklaring på løsningen
    • structure, participants and collaborations
  • konsekvensene av å bruke den pattern
    • results and trade-offs

 

 

Modul 6

Modul 6 Oppgave

 

1.

Forklarer videre i videon.

 

public HashMap<Integer,String> responsMap;

public int index;

public int[] teller;

 

responsMap = new HashMap<Integer,String>();

teller = new int[10];

int[ ] teller = {0,0,0,0,0,0,0,0,0,0}

 

teller[index] += 1;

 

responsMap.put(0, «That sounds odd. Could you describe this in more detail?»);

responsMap.put(1, “No other customer has ever complained about this \n» +

                     «before. What is your system configuration?»);

….

for (int i = 0; i < 10; i++){

System.out.println(“Svaret “ + responder.responsMap.get(i));

System.out.println(“Antall ganger + responder.teller[i]);

}

 

  1.  

Effekten av å bruke setSeed er at vi selv bestemer hva seed skal være og bestemmes ikke av klokka.

 

public skrivSeed(int seed){

randomGenerator.setSeed(seed);

}

 

Sammenlikner vi seed med Random, bruker Random tilfeldige som følge av klokka, mens seed bruker tilfeldige tall etter hvilke seed vi har valgt.

 

3.

tre av klassene i tech-support system er av type private.

To i klassen supportSystem:

  • private void printWelcome();
  • private void printGoodbye();

En i klassen Responder:

  • private void fillResponses();

 

Disse klassene er private fordi de kun skriver ut til skjerm og brukes i metodekall i noen av de andre metodene.

 

Effekten av å ha et felt som public er vell at det kan brukes fra andre klasser. Hvis vi har en metode som private er effekten at det kun kan brukes i klassen med unntak hvis den blir brukt i en annen public metode i samme klasse kan det brukes av en annen klasse.

 

Hensikten med publice og private felt/metoder er å vise eller skjule informasjon fra andre klasser.

 

6.

for å kunne kjøre programmet utenfor BlueJ, fra ett kommandovindu  (cmd) må vi lage en ny klasse med main

 

public static void main (String[]args) i en ny klasse i programmet tech-support2.

 

Deretter åpner jeg cmd (norsk ledetekst) og skriver cd som står for change directory. Vi går inn i mappen til der programmet tech-support 2 er lagret og kjører kommandoen java klasse main (klassenavn) i cmd

Steps for å kjøre programmet med main fra kommandoen cmd:

  • skriv cd\
  • cd C:\Users\Bruker\Desktop\projects\Moduler\Modul 6\Modul 6\Modul 6
  • dir
  • java klassemain

Læringsmål Modul 6

 

Kriterier

 

  • Demonstrere bruk av Random klassen, du velger ett egnet eksempel selv.

 

Random klassen er en klasse java klasse bibliotek og brukes i java for å velge noe tilfeldig:

 

Eksemplet jeg skal bruke her er fra random klassen i tech-support 2 som bruker klokke

 

private Random randomGenerator;

randomGenerator = new Random();

public int test(){

//det returneres et tilfeldig tall ut ifra klokken til datamaskinen

return randomGenerator.nextInt();

}

 

Dette var bare en test, men i vår tilfelle har valgt  å hente svarene tilfeldig i tech-support system og valgt å skrive slik

int index = randomGenerator.nextInt(responses.size());

 

 

  • Studenten skal kunne bruke klasser fra standard biblioteket på en fornuftig måte i egen kode. Skal i hvert fall kjenne til disse: String, Random, HashMap, HashSet og Iterator

 

 

Noe av disse klassen kjenner jeg til fra forrige semester som String, og iterator  som jeg brukte det i Modulene.

  • String av type “TEKST”, videre betyr alle felt og metoder som har String er kun av type “TEKST” og ikke noe tall.

F.eks for å deklarere en felt med string

private String name;

private ArrayList<String> minArray; //betyr at den inneholder objekter av type string “TEKST”

 

Her bruker jeg eksempel fra tech-support 2

//Dette er enkel metode som bruker String som metode type, dermed betyr at metoden kun kan returnere string.

 

public String getInput(){

System.out.println(“>”);

String inputline = reader.nextLine();

return inputline;

}

 

  • Iterator brukte jeg i Modul 4 forrige semester. Iterator brukes i Array sammen med loops. Det brukes for å gå gjennom en liste på lik linje som loops men har annet funksjonalitet som å finne en verdi i listen og dermed fjerne denne. (it.hasNext()) og it.next())

Iterator<ElementType> it = myCollection.iterator();

while(it.hasNext()){

call it .hasNext() to get the next element

do something with that element

}

  • Random klassen forklarte jeg tidligere og eksempel fra tech-support 2 er brukt.
  • HashMap
    • A Map is a collection similar to list and Set, that stores key/value pairs as entries. Values can be looked up by providing the key.

Example from tech-support 2

Public HashMap<Integer,String> responsMap;

responsMap = new HashMap<Integer,String>();

//to add something in the Map collection

responsMap.put(0, “the is the first thing stored in the Map collection”);

ResponsMap.put(1, “the is the second thing stored in the Map collection”);

 

As mentioned earlier Map stores key/value pairs as entries. in this case our keys are the values 0 and 1 of type integer and value the text of type String. If we want print for instance the the first text, we refer to the key “0”. Further, also if we do

enter 1, the value related will be printed.

  • HashSet:
    • Set is similar to ArrayList, but it differs from ArrayList by having the functionality of storying each individual element at most once and it does not maintain any specific order.

Example from tech-support 2

import java.util.HashSet;

HashSet<String> words = new HashSet<String>();

for(String word: wordArray){

words.add(word);

}

 

return words;

 

 

  • Studenten skal kunne skrive dokumentasjon for egne klasser og metoder som er god nok til at andre kan bruke klassen/metoden. Kan bruke de viktigste dokumentasjon taggene (@author, @returns, @param)

 

 

Dokumentasjon viser jeg i videon, de mest viktigste er nettopp disse tre @author,

@returns og @param.  Ved å dokumentere en klasse ved bruk av disse tre kan det være enklere å forstå hvem som har skrevet programmet og hva slags parameter og verdi de returner i metoder. I Tillegg til så har vi Metode kommentar som forklarer mer hva hensikten med metoden er og vi har klass introduksjon som forklarer fra denne klassen/programmet gjør.

 

 

  • Skjønner bruk av private og public, og kan forklare begrepet «Information hiding», og vise dette i praksis.

 

  • information hiding is a principle that states that internal details of a class’s implementation should  be hidden from other classes. It ensures better modularization of an application.

The private keyword enforces information hiding by not allowing other classes    access to this part of the class. This ensures loose coupling and makes an application more modular and easier to maintain.

 

 

  • Kan demonstrere bruk av static og final.

 

//static

static is java’s syntax to define class variables. Class variables are fields that are

stored in a class itself, not in an object.

Class variables are frequently used if a value should always be the same for all

instances of a class.Instead of storing one copy of the same value in each object,

which would be a waste of space and might be hard to coordinate, a single value can

be shared among all instances.

//a line of code that introduces the two new keywords which are used together: static   and final.

private static final int GRAVITY = 3;

 

//final

Constants are similar to variables, but they cannot change their value during the execution of an application.

In java, constants are defined with the keyword final

 

private final int SIZE = 10;

 

If a value is intended no to change, it is good idea to declare it final. This ensures that it cannot accidentally be changed later. Any attempt to change a constant field will result in a compile-time error message.