AlgDat 10. Forelesning 2. Gunnar Misund

Like dokumenter
AlgDat 12. Forelesning 2. Gunnar Misund

Gruppe 43. Hoved-Prosjekt Forprosjekt

Liste som abstrakt konsept/datatype

Læringsmål for forelesningen

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Generelt om operativsystemer

Object interaction. Innhold. Abstraksjon Grunnleggende programmering i Java Monica Strand 3. september 2007.

Læringsmål for forelesningen

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Operativsystemer og grensesnitt

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Algoritmer og datastrukturer E Løkker i Java

Innhold Forst a program

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister Videre

Det finnes ingenting. som kan gjøres med interface. men som ikke kan gjøres uten

Repitisjonskurs. Arv, Subklasser og Grensesnitt

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Introduksjon til Eclipse

Array&ArrayList Lagring Liste Klasseparametre Arrayliste Testing Lenkelister

Generiske mekanismer i statisk typede programmeringsspråk

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

Hva er en liste? Hvert element har en forgjenger, unntatt første element i listen. Hvert element har en etterfølger, unntatt siste element i listen

Oppsummering del 2. Læringsmål Viktigste Java-elementer Eksamen Til sist. Læringsmål Hovedpunkter Tilbakemelding Eksamen. IN1010 uke 17 våren 2019

Læringsmål for forelesningen

INF1010 våren januar. Objektorientering i Java

LC191D Videregående programmering Høgskolen i Sør-Trøndelag, Avdeling for informatikk og e-læring. Else Lervik, januar 2012.

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

1- og 2-veis Innkapsling Java Stabel Kø Prio-kø Iterator. Enveis- og toveislister Innkapsling («boxing») (Big Java 6.8.5)

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

INF1000 : Forelesning 1 (del 2)

Innhold. INF1000 Høst Hva skal evalueres? Fra kurssidene. Hvorfor har vi en lærebok? Uke 11: Repetisjon og pensumgjennomgang

Kort om meg. INF1000 Uke 2. Oversikt. Repetisjon - Introduksjon

IN1010 våren januar. Objektorientering i Java

Å bruke Java API-et til å sortere tabeller/arraylister der elementene er (referanser til) objekter

Kunnskapsbasert Engineering (KBE) med Common Lisp

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

NB!!! Veldig korte svar er gitt her. Disse burde det vært skrevet mer på ved en eksamen..

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Innhold Forstå program iii

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

1. Å lage programmer i C++

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

Innhold Innledning 1. 5 Løkke som kontrollstruktur Et program med løkke som kontrollstruktur 132. vii

Løsningsforslag Test 2

Velkommen til. INF våren 2017

Algoritmer og Datastrukturer

Innhold uke 7. Objektorientert programmering i Python: Introduksjon. Lite tilbakeblikk: Programflyt og skop. Lite tilbakeblikk: Funksjoner er uttrykk

Læringsmål uke 7. Objektorientert programmering i Python: Introduksjon. Innhold uke 7. Lite tilbakeblikk: Programflyt og skop

Læringsmål og pensum. v=nkiu9yen5nc

Stack. En enkel, lineær datastruktur

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

CORBA Component Model (CCM)

Model Driven Architecture (MDA) Interpretasjon og kritikk

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

Funksjonalitet og oppbygning av et OS (og litt mer om Linux)

INF2220: Forelesning 3

Datastrukturer og Algoritmer

Dagens forelesning. Husk prøveeksamen Fredag 15/3-13 kl 12 i R1. Iterator-teknikken. Eksempel med bruk av Iterator og Iterable-grensesnittene

Forelesning inf Java 1

Oppsummering. I. HVA VAR DET? I.1 ADTer og Programutvikling I.2 Datastrukturer I.3 Algoritmer II. PENSUM III.EKSAMEN IV. ØNSKER

Kapittel 13 Advanced Hypertext Implementation. Martin Lie Ole Kristian Heggøy

Et lite oppdrag i bakgrunnen

Innhold. 3.7 Å lese data fra brukeren Klassen String Å formatere utskrift av desimaltall... 80

IN1010 Objektorientert programmering Våren 2019

UNIVERSITETET I OSLO

TDT4110 Informasjonsteknologi grunnkurs: Kapittel 1 Introduksjon til Programmering og Python. Professor Alf Inge Wang

2 Om statiske variable/konstanter og statiske metoder.

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

Velkommen til. IN1010 Objektorientert programmering Våren 2018

EKSAMEN. Emne: Algoritmer og datastrukturer

Planlegging/forprosjekt:

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

2 Om statiske variable/konstanter og statiske metoder.

Hva er en stack? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Forelesning inf Java 1

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Introduksjon til programmering og programmeringsspråk. Henrik Lieng Høgskolen i Oslo og Akershus

Viktig. Rettet i koden. Oppgaven. Obligatorisk oppgave 2 - Kort om oppgaven og litt informasjon. Fredrik Sørensen OMS-gruppen, IfI

Mer om C programmering og cuncurrency

Hovedprosjekt i data ved Høgskolen i Oslo våren 2007

Leksjon 2. Setninger og uttrykk

Oversikt. INF1000 Uke 2. Repetisjon - Program. Repetisjon - Introduksjon

class Book { String title; } class Dictionary extends Book { int wordcount; } class CartoonAlbum extends Book { int stripcount; }

EKSAMENSOPPGAVE. IAI20102 Algoritmer og datastrukturer

Programmeringsspråket C

Forelesning inf Java 1

INF2220: Forelesning 3. Map og hashing Abstrakte datatyper (kapittel 3.1) Map (kapittel 4.8) Hashing (kapittel 5)

oppgavesett 4 INF1060 H15 Øystein Dale Hans Petter Taugbøl Kragset September 22, 2015 Institutt for informatikk, UiO

INF2810: Funksjonell Programmering. En metasirkulær evaluator

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Transkript:

AlgDat 10 Forelesning 2

Oversikt Java repetisjon IDE eller teksteditor + kommandolinje? Java Collections and Generics

Programvareutvikling En mengde mer eller mindre veldefinerte metoder (software engineering): Fossefall Iterative metoder Smidig utvikling (Agile Development) Extreme programming SCRUM Felles for alle: Tre hovedkomponenter: 1. Analyse 2. Design 3. Utvikling (programmering)

Analyse Forstå problemet/oppgaven Finne og vurdere ulike løsningsstrategier Finne og vurdere allerede eksisterende løsninger...selvfølgelig i tett kontakt med oppdragsgiver/prosjekteier

Design Skisse av komponenter og data/meldinsflyt (arkitektur) Valg av plattform(er) Funksjonalitet: Veldefinert beskrivelse av input/output Bruk av formelle metoder for beskrivelse, typisk UML

Implementasjon Valg av språk Koding Testing

Hvorfor Java? Plattformuavhengig: Kompilert bytekode kan f.eks. kjøres på Windows og Linux uten problemer (hvis man passer på å ikke bruke plattformavhengige mekanismer, f.eks. kall på operativsystem-funksjoner) OO Enkelt Oversiktelig? Mye ferdig: Datastrukturer med algoritmer Filhåndtering, nettverksoperasjoner Grensesnitt-komponenter

OO i et nøtteskall En mer naturlig / intuitiv / virkelighetsnær måte å programmere på (?) Oppmuntrer til modularisering av kode: Oversiktelig, enkelt å bruke: Applikasjoner kan bygges ved å sette sammen ferdige komponenter Arv: Eksisterende klasser kan utvides/spesialiseres for nye anvendelser Interface: Nye klasser kan implementeres som har samme oppførsel, men som utfører oppgavene på andre måter Dermed kan man bytte ut komponenter i eksisterende applikasjoner, uten å endre selve koden Men: Kan paradoksalt nok ble uoversiktelig: Store arvehierarkier kan gjøre det vanskelig å finne ut hva som faktisk skjer, og hvor

Java programmering Java dokumentasjon API Tutorial Kode eksempler Google: Kodesnutter Hjelpepakker Open source prosjekter

Java Basics Primitive typer: int, float, byte, char, bolean,... Trenger ikke å instansieres (altså ikke new int() ) Operatorer Tilordning: "=" Logiske tester: ==,!=, <, >, &&, Øke, redusere: ++, -- Kontrollstrukturer... Klasser Abstrakte Interface Referanser

Java Collections Java Collections API er et sett klasser som representerer ulike typer samlinger implementert på forskjellige måter. Grensesnittet definerer operasjonene som støttes av de forskjellige samlingene. Navnekonvensjon: Navnene på de konkrete klassene en kombinasjon av underliggende datastruktur og type samling. For eksempel implementerer både ArrayList og LinkedList operasjonene grensesnittet List, men underliggende datastruktur er forskjellig (henholdsvis tabell(array) og lenket liste).

Eksempel: Set (mengde) En mengde (Set) kan defineres som en samling elementer hvor man ikke kan ha duplikater (to eller flere like elementer), Innbyrdes rekkefølge ingen betydning. Ikkelineær samling som kan implementeres med lineær datastruktur.

Abstrakte datatyper (ADT) Vi kan si at en datatype er en gruppe verdier og operasjonene som er definert for disse verdiene. Skal vi kunne gjøre noe med heltall i en datamaskin, må vi ha en datatype som representerer heltall og operasjoner som kan utføres på datatypen. Tilsvarende: Skal vi kunne bruke samlingen Set, må vi lage en datatype som representerer samlingen. Dette kalles en abstrakt datatype. En abstrakt datatype er en datatype der verdiene og operasjonene i utgangspunktet ikke er definert i programmeringsspråket. Abstrakt fordi detaljer rundt implementasjon bør være skjult for brukeren. I Java kan en abstrakt datatype defineres i et grensesnitt (interface). Her beskriver vi hvilke operasjoner som skal kunne utføres, men ikke hvordan operasjonene skal utføres.

Interface Set Hvilke operasjoner skal kunne utføres på elementene. Vi ønsker å skille hvilke operasjoner som skal utføres fra hvordan de implementeres, og lager derfor et grensesnitt der vi definerer hvilke operasjoner (metoder) som skal kunne utføres. Et grensesnitt inneholder en eller flere metodesignaturer, men ingen implementasjon av metodene. Grensesnittet Set definerer en abstrakt datatype. For at vi skal kunne lage en konkret samling av type Set må det finnes en klasse som implementerer de abstrakte metodene definert i grensesnittet. Brukere av en klasse som implementerer Set har en garanti for at metodene definert i dette grensesnitt finnes, og kan bruke dem uten kjennskap til hvordan de er implementert. http://java.sun.com/javase/6/docs/api/

Eksempelkoding Oppgavesett 1: Byer fra geonames.org Datasett geocitites15000

Utviklingsmiljø Editor + kommandolinje, eller IDE (Integrated Development Environment)? Velg det dere er mest fortrolig med. MEN: Jeg vil sterkt anbefale dere at dere lærer dere og tar i bruk en IDE, f.eks. Netbeans eller Eclipse: 1. Mer effektiv koding. 2. Bedre oversikt. 3. Automatisk tilgang dokumentasjon. 4. Automatisk utfylling av argumenter, klassemetoder etc. 5. Og til slutt, men kanskje viktigst: Alle IDE'er har en god debugger, som bla.a. gir dere en visuell oversikt over både programutførelse og tilstanden på datastrukturene. Gjør det mye enklere å forstå f.eks. rekursjon.

Neste forelesning Mer java??? Geonames eksempel Tabeller Lenkede lister