Programmering grundkurs

Relevanta dokument
Programmering grundkurs

Programmering grundkurs

Programmering grundkurs

Programmering grundkurs

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

729G75: Programmering och algoritmiskt tänkande. Tema 1. Föreläsning 1 Jody Foo

Mer grafik. Jan Erik Moström

729G75: Programmering och algoritmiskt tänkande. Tema 1, föreläsning 1 Jody Foo

729G74 IT och programmering, grundkurs. Tema 2, Föreläsning 2 Jody Foo,

DD1314 Programmeringsteknik

729G04 Programmering och diskret matematik. Föreläsning 7

729G75: Programmering och algoritmiskt tänkande. Tema 3, föreläsning 2

EnKlass. Instans 3 av EnKlass. Instans 2 av EnKlass

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

729G06 Programmering och logik. Info om pythondelen & introduktion till objektorienterad programmering.

Programmering och algoritmiskt tänkande. Tema 3, föreläsning 1 Jody Foo

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Vi har ofta behov av att behandla datastrukturer på ett enhetligt sätt så att vi kan göra samma sak i flera olika program.

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

TDDE44 Programmering, grundkurs

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Grundläggande datalogi - Övning 2

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Grundläggande datalogi - Övning 3

Lektion 2: Sökagenter. Robin Keskisärkkä

Kurslitteraturen. C-nivå Villkorssatser [kap 8] if & elif & else and & or Loopar [kap 9] for

Kodexempel från Programmering 2 Tobias Wrigstad, Ph.D.

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 5 Mer om funktioner, villkor

729G74 IT och programmering, grundkurs. Tema 2. Föreläsning 3 Jody Foo,

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 2 Programmeringsteknik och C DD1316

Sätt att skriva ut binärträd

729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer

Programmering för språkteknologer II, HT2011. Rum

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Inom datalogin brukar man använda träd för att beskriva vissa typer av problem. Om man begränsar sig till träd där varje nod förgrenar sig högst två

Objektorienterad Programmering (OOP) Murach s: kap 12-16

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 13 och 14: Binära träd

Länkade listor, stackar och köer

Föreläsning 8 Programmeringsteknik och Matlab DD1312. Klassmetod. Egen modul

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

UML. Klassdiagr. Abstraktion. Relationer. Överskugg. Överlagr. Aktivitetsdiagram Typomv. Typomv. Klassdiagr. Abstraktion. Relationer.

DD2385 Programutvecklingsteknik Några bilder till föreläsning 1 24/ Kursöversikt Javarepetition/Javaintroduktion

729G74 IT och programmering, grundkurs. Tema 3. Föreläsning 2 Jody Foo,

729G06 Programmering och logik. OOP: Klassdiagram, arv Allmänt: Undantagshantering

Övning 1. Abstrakta datatyper. 1. Stacken. class Stack: """A representation of a last-in-first-out (LIFO) stack of objects."""

Grundläggande datalogi - Övning 4

Laboration: Whitebox- och blackboxtesting

OOP Objekt-orienterad programmering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 2 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Introduktion till programmering SMD180. Föreläsning 8: Listor

Malmö högskola 2007/2008 Teknik och samhälle

Grundläggande databehandling ht 2005

Läsöversikt. Föreläsningar 2-6. Genomförande av laborationer

Lösningsförslag till tentamen

Ordlistor, filhantering och ut på webben. Linda Mannila

Övning 1 - Abstrakta datatyper

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

729G04 Programmering och diskret matematik

Tänk på följande: Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TDP002 Imperativ programmering. Laborationsmaterial emacs python-mode

Objektorienterad programmering i Java I

729G04 Programmering och diskret matematik

TENTAMEN OOP

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Hur man programmerar. Exempel på problemlösning i Python

TDDE10 TDDE11, 725G90. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Programmering för språkteknologer II, HT2014. Rum

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Objektorienterad Programmering (TDDC77)

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

729G04 Programmering och diskret matematik. Python 3: Loopar

PYTHON SNABBREPETITION MEN FÖRST LITE ALLMÄNT OM PROGRAMMERING 729G04 PYTHON 2. Dagens Python

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Skillnader mellan Python och Java

Föreläsning 3: Booleans, if, switch

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

F6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander

TDDC76 Programmering och datastrukturer

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

En överblick. Pseudo-parallell simulering. Snabbköpsexemplet, forts. Två olika sätt att modellera och simulera. Schedulering

OOP Objekt-orienterad programmering

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Laboration 1 - Grunderna för OOP i Java

Tentamen i Grundläggande programmering STS, åk 1 fredag

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Namn Stil Dokumentation Objekt-orienterad programmering OBS OBS OBS OBS OBS OBS OBS OBS

Transkript:

Programmering grundkurs Föreläsning 11 Jody Foo, jody.foo@liu.se

Föreläsningsöversikt Laboration 6 Abstraktion och OOP Klassdiagram med UML (Unified Modelling Language) Egna klasser som innehåller andra egna klasser Nedbrytning av problem genom fördelning av ansvar, "delegera vidare uppgiften" Olika implementationsmönster inom OOP Interaktiva textgränssnitt Instans som huvudprogram

Laboration 6 OOP: nya mönster uppdelning av problem klasser med olika roller Interaktiva textgränssnitt Del 1: Representation av text Del 2: Att-göra-lista

Exempel många hus i en stad, befolkning

Exempel på aggregering City name : str add_house(house : House) get_population() : int houses 0..* House occupants : list = [] add_occupant(name : str) get_number_of_occupants() : int

Uppdelning av problem. Exempel på aggregering class City(object): def init (self, name): self.houses = [] self.name = name def add_house(self, house): self.houses.append(house) def get_population(self): total_population = 0 for house in self.houses: total_population += house.get_number_of_occupants() return total_population flaxtown = City("Linköping") house1 = House() house1.add_occupant("a") house1.add_occupant("b") flaxtown.add_house(house1) house2 = House() house2.add_occupant("c") flaxtown.add_house(house2) print(flaxtown) def str (self): city_str = "Name of city: {}\npopulation: {}" return city_str.format(self.name, self.get_population()) class House(object): def init (self): self.occupants = [] def add_occupant(self, name): self.occupants.append(name) def get_number_of_occupants(self): return len(self.occupants)

Exempel böcker i en bok-katalog

Exempel: Böcker i en bok-katalog Två egna klasser: Book, BookCatalogue Ett BookCatalogue-objekt kan innehålla flera Book-objekt BookCatalogue books 1 Book title : str = "Untitled"

books1.py # Exempel där BookCatalogue inte ansvarar för något class Book(object): def init (self, title="untitled"): self.title = title def str (self): return "<Book: '{}'>".format(self.title) class BookCatalogue(object): def init (self): self.books = [] def str (self): books_as_strings = [] for book in self.books: books_as_strings.append(str(book)) return "BookCatalogue: {}".format(", ".join(books_as_strings)) if name == " main ": bc = BookCatalogue() new_book = Book("Book 1") bc.books.append(new_book) new_book = Book("Book 2") bc.books.append(new_book) new_book = Book("Book 3") bc.books.append(new_book) print(bc)

books2.py # Exempel där BookCatalogue tar hand om logistik när nya böcker ska läggas till class Book(object): def init (self, title="untitled"): self.title = title def str (self): return "<Book: '{}'>".format(self.title) class BookCatalogue(object): def init (self): self.books = [] def create_and_add_book(self, title): new_book = Book(title) self.books.append(new_book) def str (self): books_as_strings = [] for book in self.books: books_as_strings.append(str(book)) return "BookCatalogue: {}".format(", ".join(books_as_strings)) if name == " main ": bc = BookCatalogue() bc.create_and_add_book("book 1") bc.create_and_add_book("book 2") bc.create_and_add_book("book 3") print(bc)

books3.py # Exempel där BookCatalogue tar hand om att ha koll på bok-id mha instansvariabel class Book(object): def init (self, book_id, title="untitled"): self.book_id = book_id self.title = title def str (self): return "<Book#{}: '{}'>".format(self.book_id, self.title) class BookCatalogue(object): def init (self): self.books = [] self.book_counter = 0 def create_and_add_book(self, title): new_book = Book(self.book_counter, title) self.book_counter += 1 self.books.append(new_book) def str (self): books_as_strings = [] for book in self.books: books_as_strings.append(str(book)) return "BookCatalogue: {}".format(", ".join(books_as_strings)) if name == " main ": bc = BookCatalogue() bc.create_and_add_book("book 1") bc.create_and_add_book("book 2") bc.create_and_add_book("book 3") print(bc)

books4.py (överkurs) # Exempel där Book tar hand om att ha koll på bok-id mha klassvariabel class Book(object): next_book_id = 0 def init (self, title="untitled"): self.book_id = Book.next_book_id Book.next_book_id += 1 self.title = title def str (self): return "<Book#{}: '{}'>".format(self.book_id, self.title) class BookCatalogue(object): def init (self): self.books = [] def create_and_add_book(self, title): self.books.append(book(title)) def str (self): books_as_strings = [] for book in self.books: books_as_strings.append(str(book)) return "BookCatalogue: {}".format(", ".join(books_as_strings)) if name == " main ": bc = BookCatalogue() bc.create_and_add_book("book 1") bc.create_and_add_book("book 2") bc.create_and_add_book("book 3") print(bc)

Exempel på utökning Flera böcker i bok-katalog Flera bok-kataloger i ett bibliotek... flera bibliotek i en biblioteksorganisation osv

Interaktiva text-gränssnitt

Interaktionsloop med villkor och funktionsanrop def new_book(bookcatalogue): print("new_book() körs") def show_books(bookcatalogue): print("show_books() körs") def main(): bookcatalogue = BookCatalogue() user_input = "" while user_input!= "q": user_input = input("vad vill du göra? ").lower() if user_input == "ny": new_book(bookcatalogue) elif user_input == "visa": show_books(bookcatalogue) if name == ' main ': main()

Interaktionsloop med dictionary och funktionsobjekt def new_book(bookcatalogue): print("new_book() körs") def show_books(bookcatalogue): print("show_books() körs") def main(): commands = {} commands["ny"] = new_book commands["visa"] = show_books bookcatalogue = BookCatalogue() user_input = "" while user_input!= "q": user_input = input("vad vill du göra? ").lower() for command, cmd_func in commands.items(): if command == user_input: cmd_func(bookcatalogue) break if name == ' main ': main()

Interaktiv funktion som skapar ny bok def new_book(bookcatalogue): while True: confirmed = "" title = input("ange titel: ") while confirmed not in ["j", "n"]: confirmed = input("du skrev '{}', är det OK? [j/n]: ".format(title)) if confirmed == "j": bookcatalogue.create_and_add_book(title) break else: print("ok, skriv in igen!")

Utbruten bekräftelsefunktion def get_user_confirmation(message, yes, no): user_input = "" while user_input not in [yes, no]: user_input = input("{} [{}/{}]: ".format(message, yes, no)) if user_input == yes: return True else: return False def new_book(bookcatalogue): while True: confirmed = "" title = input("ange boktitel: ") message = "Du skrev '{}', är det OK?".format(title) user_confirmation = get_user_confirmation(message, "j", "n") if user_confirmation: bookcatalogue.create_and_add_book(title) break else: print("ok, skriv in igen!")

Instans som huvudprogram

Skript som vi brukar skriva dem from books4 import * def get_user_confirmation(message, yes, no): user_input = "" while user_input not in [yes, no]: user_input = input("{} [{}/{}]: ".format(message, yes, no)) if user_input == yes: return True else: return False def new_book(bookcatalogue): while True: confirmed = "" title = input("ange boktitel: ") message = "Du skrev '{}', är det OK?".format(title) user_confirmation = get_user_confirmation(message, "j", "n") if user_confirmation: bookcatalogue.create_and_add_book(title) break else: print("ok, skriv in igen!") def main(): commands = {} commands["ny"] = new_book commands["visa"] = show_books bookcatalogue = BookCatalogue() user_input = "" while user_input!= "q": user_input = input("vad vill du göra? ").lower() for command, cmd_func in commands.items(): if command == user_input: cmd_func(bookcatalogue) break if name == ' main ': main() def show_books(bookcatalogue): print(bookcatalogue)

Skript med instans som "program" from books4 import * def get_user_confirmation(message, yes, no): user_input = "" while user_input not in [yes, no]: user_input = input("{} [{}/{}]: ".format(message, yes, no)) if user_input == yes: return True else: return False class BookApp(object): def init (self): self.commands = {} self.commands["ny"] = self.new_book self.commands["visa"] = self.show_books self.bookcatalogue = BookCatalogue() self.main() def show_books(self): print(self.bookcatalogue) def main(self): user_input = "" while user_input!= "q": user_input = input("vad vill du göra? ").lower() for command, cmd_func in self.commands.items(): if command == user_input: cmd_func() break if name == ' main ': BookApp() def new_book(self): while True: confirmed = "" title = input("ange boktitel: ") message = "Du skrev '{}', är det OK?".format(title) user_confirmation = get_user_confirmation(message, "j", "n") if user_confirmation: self.bookcatalogue.create_and_add_book(title) break else: print("ok, skriv in igen!")