Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO.

Slides:



Advertisements
Liknende presentasjoner
Repetisjon innkapsling static tabell av primitiv datatype LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring.
Advertisements

15 Notater og markeringer i teksten
Tabeller av objekter Klassen ArrayList
14 okt. 2003, Arne Maus Inst. for informatikk, UiO
Bygg web på Opplæring Presentasjon Idium AS Bygg web på Opplæring.
C++ for Java-programmerere
Datafiler og serialisering Tekstfiler Scanner-klassen Binær overføring av data Direkte tilgang til filinnholdet Serialisering LC191D Videregående programmering.
Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring
Hvordan intervjue en forsker?
Introduksjon til objektorientert programmering i PHP
Uke 10 - Sortering, og hvordan lage en klasse for et klassebibliotek 21 okt. 2003, Arne Maus Inst. for informatikk, UiO.
Uke 8 - Mer om: Objekter, klasser og pekere
1 Java 6 Mer om metoder Tekster Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet i Oslo.
1 Litt om OO og programmering Arne Maus. 2 OO og Java (og C++, C#)  Arven fra Simula  Programstruktur i Java  Generering av objekter  Beskyttelse.
Java 12 Mer filbehandling - skrive til fil HashMap Et større eksempel Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Java 4 Mer om forgreninger While-løkker Ole Christian Lingjærde
Objekt, Instanser og referanser + litt til. Objekter  Instanser  En instans er et objekt av en bestemt klasse  Instanser blir laget ved å kalle klassens.
Objektorientert programmering i PHP del 2
Java 14 Et eksempel fra bioinformatikk: analyse av biologiske sekvenser Ole Christian Lingjærde Gruppen for bioinformatikk Institutt for informatikk Universitetet.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
IS-102 Klassedefinisjoner
Å overleve oppgaveskriving: Litteraturgjennomgang
Oblig4 - forklaringer Arne og Ole Christian.
Eiendomregister mars 2002 Arne Maus. import java.util.*; import inf101.*; /* Klasse med main() som starter hele programmet */ class EiendomsregisterMain.
Eiendomsregister - eksempel
Tema: Introduksjon Hvorfor Velocity? Installasjon Velocity VS. JSF / JSP Eksempler Oppsumering.
C# for javaprogrammerere
Åsmund Eldhuset asmunde stud.ntnu.no folk.ntnu.no/asmunde/algdat/
Generelt I/O if/else Funksjoner Lists Løkker Dictionaries Annet Listebehandling Klasser Python med noen algdat-anvendelser Åsmund Eldhuset asmunde *at*
En gang til!? .
Feilhåndtering. Feil er uunngåelige! Erfaring viser at feil i dataprogrammer som består av mer enn noen få linjer ikke er til å unngå. For å få et godt.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 2.10 Default values – standardverdier ved oppstart MER OM: Sub-prosedyrer og sub-funksjoner.
Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse.
INF150 Programmering mandag 11.9
Programmering i Java versjon desember 2002 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.
Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.
Objektorientert programmering
1 Organisering av kode (Kapittel 5). 2 Mål ● Forstå inkludering er og hvilken gevinst det gir ● Lære å utvikle egne funksjoner ● Forstå variablenes virkemåte.
Høgskolen i Oslo Webprogrammering Filbehandling i PHP.
Dynamiske nettsider PHP Del 1 – variable. PHP  PHP (Personal Home Page)  Fritt tilgjengelig programmeringsspråk  åpen kildekode  Plattformuavhengig.
Uke 7 - del I: Repetisjon del II: Objekter, klasser og pekere 30 sept. 2003, Arne Maus Inst. for informatikk, UiO.
Java 3 Mer om uttrykk Terminal I/O Forgreninger
Java 11 Programmering med og uten objekter: hva er forskjellen?
VI LAGER EN PLATEBUTIKK
Å lese tall fra en fil, klassen Scanner 1.Et Scanner-objekt kan knyttes til et strømobjekt eller til en streng. 2.Kan skanne teksten etter data av ulike.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 18.9 Lesing av data fra fil og skriving av data til fil. Side 411 – 4.. Kap 4.
Programmering sif8005. Praktisk informasjon  Innleveringsfrist øvinger: mandag kl  Alle øvinger er obligatoriske  Studass tilgjengelig 6 timer.
Tabeller Dette er en tabell, eller array. Den kan defineres sånn som dette: public int[] heltallsTabell = new int[11]; //Her er 11 tabellens lengde for.
Jæger: Robuste og sikre systemer INF150 Programmering Kapittel 2: Problemløsning Kapittel 3.1 og 3.2.
INF1000 (Uke 14) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Anja B.
INF1000 (Uke 13) Resten av eksamen H03 + del av V05 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild.
Objekt, Instanser og referanser + litt til. Objekter  Instanser  Kan sees på som det samme. Personen Per kan være både et objekt og en instans av klassen.
Main metoden n public static void main(String[] args){ } n Inni denne metoden skjer alt! n Det kan bare finnes en main metode per program. n Den kan ligge.
INF Objektorientert programmering
Object  Klassen i java  Alle klasser arver fra denne om ikke noe annet blir spesifisert  ArrayList.add(Object instans)  Alle elementer formes til Object.
INF1000 (Uke 14) Eksamen V06 Grunnkurs i programmering Institutt for Informatikk Universitet i Oslo Are Magnus Bruaset og Arild Waaler.
Byggeklosser i java  Klassedefinisjon  Variabel deklarasjon  Metodedeklarasjoner  En ordentlig klasse  Spesielle/kryptiske skrivemåter  løkker og.
Jæger: Robuste og sikre systemer INF150 Programmering mandag 25.9 MER OM: Sub-prosedyrer og sub-funksjoner Kap 4.
Inf1000 (Uke 10) HashMap og ArrayList
INF1000 (Uke 4) Mer om forgreninger, While-løkker
Inf1000 (Uke 5) Arrayer, filer og tekst
INF1000 (Uke 11) Programmering
Finne feil - Debugging Introduksjon til sortering.
Kapittel 4 Skriving av klasser. 4.1 Anatomien til ein klasse Så langt har vi brukt ferdige klasser frå klassebiblioteket i Java Vi lagar objekt og brukar.
Kapittel 7 Array (lister og tabellar). 7.1 Arrayelement Array (lister, tabellar) er kjent frå VB Blir brukt til å organisere data når vi har mange dataelement.
Lokale variable Hvis vi trenger å ta vare på en verdi, inne i en metode kan vi definere en lokal variabel: int amount = 0; vi må fortelle hvilken type.
Triks Avslutt alle klasser, metoder og løkker samtidig som du lager dem. Deklarer alle variablene/referansene på begynnelsen av klassen. Hvis du definerer.
IS-102 Interaksjon med objekter
IN3030 – Effektiv parallellprogrammering Uke 1 2. del, våren 2019
Utskrift av presentasjonen:

Ekstra mange tips til Oblig 3! 12. mars 2007 Are Magnus Bruaset og Arild Waaler Inst. for informatikk, UiO

Når du skal løse en slik oppgave: Les oppgaveteksten nøye! Ikke gjør mer enn det er spørsmål etter! Identifiser objektene og bestem datastruktur for hver klasse som du trenger Tegn gjerne en figur over objektene og datastrukturen. Da er det lettere å programmere Skaff deg oversikt over spesielle teknikker du trenger å bruke, i dette tilfelle lesing fra og skriving til fil Skriv koden gradvis og test ut metoder etter hvert som du skriver dem Skriv gjerne først de metodene som er nødvendig for å få en enkel prototype av programmet ditt opp og kjøre! Utsett for eksempel filbehandlingen til slutt!

4 klasser er angitt i oppgaveteksten class Oblig3 her legger vi main-metoden som sparker det hele i gang. fra denne klassen oppretter vi et Hybelhus-objekt og kaller en metode i dette objektet som styrer interaksjonen med brukeren class Hybelhus her ligger den sentrale datastrukturen og metoder for alle funksjonene i menyen vi initialiserer datastrukturen for hybelhuset i konstruktøren class Hybel info knyttet til en hybel: leietager og utestående class Student info knyttet til student: navn og saldo

class Oblig3 – forslag til kode public class Oblig3 { public static void main(String[] args) { Oblig3 oblig3kjøring = new Oblig3(args); } Oblig3(String[] inputfiler){ String datafil = "HaiHus.data"; String strømfil = "Lysregning.data"; if( inputfiler.length > 0 ) datafil = inputfiler[0]; if( inputfiler.length > 1 ) strømfil = inputfiler[1]; Hybelhus utsyn = new Hybelhus(datafil,strømfil); utsyn.kommandoløkke(); } Filnavnene overføres til konstruktøren for Hybelhus-klassen Så overfører vi kontrollen til metoden i utsyn som styrer brukerinteraksjon Default filnavn som i oppgaveteksten, men med mulighet for endringer fra kommandolinjen. Bra for debugging – du kan lett bruke andre testfiler! Det eneste main-metoden gjør, er å opprette et objekt av klassen Oblig3

Hybel-objekt Student-objekt Enkel skisse av datastrukturen Hybelhus-objektet

class Hybelhus: forslag til datastruktur public class Hybelhus { private String datafil; private String strømfil; final int ANT_KOR = 4; final int ANT_ROM = 8; final String TOM_HYBEL = "TOM HYBEL"; private int totalFortjeneste; private int antallHybelmånederMedTommeHybler; private int totaltAntallMåneder; In tastatur = new In(); Out skjerm = new Out(); private Hybel[][] hyblene = new Hybel[ANT_KOR][ANT_ROM]; ’final’ markerer at verdiene ikke kan endres. Det er vanlig at slike konstanter har store bokstaver. ’private’ skjuler variable for andre klasser. Dette er god programmeringsskikk! Variable for informasjonen som leses fra datafilen.

Konstruktøren til Hybelhus-klassen Konstruktøren utføres når et objekt opprettes og aldri siden. I konstruktøren er det vanlig å legge initialisering av datastrukturen. Konstruktøren mottar gjerne argumenter med informasjon som den trenger for initialiseringen. Siden poenget med denne oppgaven er å trene på å lage en objekt-orientert modell, skal jeg vise i detalj hvordan man kan foreta innlesning fra datafilen i konstruktøren Tips om lesing fra strømfilen står i oppgaveteksten. Skriving til filer må dere selv finne ut av (se kap. 3 i boka!). Vær nøye med å teste ut koden steg for steg! Når dere kommer til skriving av fil, vær nøyaktig med å teste at filen ser akkurat slik ut som den skal etter skriving! Tips ved innlesning: Skriv ut til skjerm samtidig som dere leser inn. Lurt for feilsøking!

class Hybelhus: forslag til konstruktør Hybelhus( String datafil, String strømfil ) { this.datafil = datafil; this.strømfil = strømfil; skjerm.outln("Leser fra " + datafil + ":"); In hybelfil = new In(datafil); for(int i = 0; i < ANT_KOR * (ANT_ROM - 1); i++) { int gang = hybelfil.inInt(";"); skjerm.out(gang); char bokstav = hybelfil.inChar(";"); skjerm.out(bokstav); String studentnavn = hybelfil.inWord(";"); skjerm.out(" " + studentnavn); int saldo = hybelfil.inInt(";"); skjerm.outln(" " + saldo); hybelfil.readLine(); //for å bli kvitt resten av linja. hyblene[gang - 1][(int)(bokstav - 'A')] = new Hybel(studentnavn.trim(), saldo); } totaltAntallMåneder = hybelfil.inInt(";"); antallHybelmånederMedTommeHybler = hybelfil.inInt(";"); totalFortjeneste = hybelfil.inInt(";"); hybelfil.close(); }

Nyttig metode i class Hybelhus void listLeietagere(){ for(int i = 0; i < ANT_KOR; i++){ for(int j = 1; j < ANT_ROM; j++){ //Tar ikke med fellesarealene her skjerm.out(i+1); skjerm.out((char)(j+'A') + " "); Student student = hyblene[i][j].getLeietaker(); if(student != null) skjerm.outln(student.getNavn() + " " + student.getSaldo()); else skjerm.outln(TOM_HYBEL + " " + hyblene[i][j].getUtestående()); } Her har jeg brukt en vanlig Java-konvensjon når metodene for å hente dataverdi begynner med get. Metodene for å oppgi verdier skal begynne med set ifølge konvensjonen. NB! Bruk alltid slike metoder for å aksessere variable i en annen klasse og la variablene være deklarert private. Alt annet er dårlig programmeringsskikk og gir i lengden opphav til stygge bugs!

Videre jobbing med class Hybelhus: Begynn gjerne med å lage metoden for å styre menyen – jeg har kalt denne ”kommandoløkke()”. Identifiser alle metodene du skal kalle herfra. Tenk igjennom hva hver metode skal gjøre og hvordan den skal gjøre det FØR du begynner å skrive kode. Bruk gjerne små skisser og stikkord. Spesielt må du tenke over hvilke metoder du trenger fra de andre klassene og hvordan dataverdier skal endres. Utfordringen er å bryte oppgaven du skal løse ned i mange småproblemer – som hver for seg er enkle å løse – og så sette sammen løsningene av småproblemene slik at de sammen kan løse hele oppgaven.

… og de andre klassene For klassene Hybel og Student gjelder det samme: list opp alle metodene du trenger og tenk over hvilke data disse trenger. Hvordan skal de få tak i informasjonen de trenger? Husk at du aldri bør kode overalt samtidig. Når du har fått en viss oversikt, skriv kode for de enkle metodene først og test dem grundig før du går videre. Ikke lås deg til en bestemt løsning og datastruktur fra starten. Ofte mangler vi oversikt når vi begynner, og blir nødt til å endre konstruksjonen av programmet underveis fordi det dukker opp ting vi ikke hadde tenkt på da vi startet. Dette er heller regelen enn unntaket!

… og til slutt vil jeg bare ha sagt at: Å jobbe med obligene er det du lærer mest av i kurset. Bruk boka aktivt som oppslagsverk i denne prosessen. Studer relevante programeksempler i boka! Det er utrolig mye lettere å lære seg noe når du trenger det for å løse en oppgave – enn å lære seg det bare for å lese til eksamen! Prøv å bli litt kjent med Java API samtidig. Det er gøy! Java-verdenen er stor og interessant. Prøv deg frem på egen hånd! … og lykke til, da!