SOLID är en akronym för fem stycken designprinciper som används vid mjukvaruutveckling. SOLID står för:
|
|
- Ann-Sofie Åberg
- för 8 år sedan
- Visningar:
Transkript
1 Lektion 32 Övningar Korta punkter Jag vill ha en redovisning från alla grupper där ni går igenom person för person vad personen har ansvarat för och vad och vem personen har parprogrammerat på. Ta även med ickeprogrammeringsrelaterade uppgifter, t.ex. Har fungerat som projektledare, Har ansvarat för dokumentation eller liknande. Om någon av er eller hela gruppen vill lämna in ovanstående individuellt är det ok. Dock vill jag ha ett dokument från gruppen ifall inte hela gruppen väljer att lämna in individuellt. Klart: Torsdag nästa vecka. SOLID SOLID är en akronym för fem stycken designprinciper som används vid mjukvaruutveckling. SOLID står för: Single Responsibility Principle Open/Closed Principle Liskov Substitution Principle Interface Segregation Principle Dependency Inversion Principle Nedan följer en definition av de olika principerna: Single Responsibility Principle: Varje enhet (objekt/metod/etc) skall endast ha ett ansvar. Dvs. istället för att skriva en metod FormatAndRenderHTML som innehåller implementationer för både formattering och rendering så bör metoden brytas isär i FormatHTML och RenderHTML. Ett annat vanligt sätt att uttrycka denna princip är An entity should have one, and only one reason to change. Denna princip medför att enheten kommer bli lättare att underhålla (en ändring av renderingen i exemplet ovan kommer inte påverka formatteringen), koden kommer bli mer lättläst och lättare att testa (Lägg märke till att man för det mesta pratar om klasser/objekt när det gäller denna princip motiveringen fungerar dock lika bra för metoder). Open/Closed Principle: Varje enhet bör vara Öppen för utökningar av funktionalitet, men stängd för modifiering av befintlig funktionalitet. T.ex. Bör du inte ändra implementationen av string-klassen i c# (modifiering), men du kan skriva en extension method för string-klassen om det skulle behövas (utökning). Denna princip gäller dock inte bara klassbibliotek utan även egna implementationer. Om du behöver utökad funktionalitet och åstadkommer det med en extension method så innebär det att den nya funktionaliteten endast kan medföra oönskat beteende på de ställen där extensionmetoden används. Om du istället ändrar en
2 definition av en befintlig metod i en mogen applikation så innebär det att det finns potentiella oönskade effekter på alla ställen klassen används (Lägg märke till att implementation av interface, arv och wrapper-funktioner är andra sätt att utöka funktionalitet utan att ändra basimplementationen). Denna princip medför att ändringar är mindre troliga att medföra oönskat beteende (t.ex. buggar). Koden kommer troligtvis också bli enklare att underhålla. Liskov Substitution Principle: Ett objekt i ett program bör kunna ersättas med objekt som ärver från detta objekt utan att programmet slutar fungera som tänkt. Dvs. om du implementerar en klass, 3D Chart som ärver utav klassen Chart så bör 3D Chart kunna användas på alla ställen i programmet där Chart används utan att programmet uppvisar oönskat beteende (Namnet på principen kommer f.ö. från namnet på personen som definierade principen). Denna princip medför att användning/implementation av en subtyp (arv) är mindre trolig att medföra oönskat beteende (t.ex. buggar). Koden kommer troligtvis också bli enklare att underhålla. Interface Segregation Principle: Man bör sträva efter att använda många, specifika, interface, snarare än ett interface som täcker flera saker eller allt. Om du t.ex. vill ha objekt som dels skall kunna sparas i en databas och dels skall kunna sparas till filsystemet så bör objektet implementera ett interface för objekt-i-databas-funktionaliteten (t.ex. IEntity som garanterar ett ID) och ett separat interface för objekt-i-filsystemet-funktionaliteten (t.ex. ISerializable som garanterar en metod för att serialisera objektet till filsystemet). Detta gör att ifall vi senare behöver implementera objekt som endast skall sparas till disk så har vi redan ett interface för det och implementationen behöver inte innehålla onödiga funktioner eller liknande för databas-funktionalitet. Denna princip medför att konkreta implementationer hålls rena (inga extra metoder behöver implementeras för att de finns i interfacet). Detta innebär i sin tur att koden blir enklare att underhålla och modifiera. Dependency Inversion Principle: Denna princip innebär att Högnivå-objekt (Förenklat: ett objekt som på något sätt hanterar flera andra objekt t.ex. ett repository) ej skall vara beroende av Lågnivå-objekt. Detta skiljer sig från äldre objektorientering där högnivåobjekt ofta är beroende av konkreta implementationer av lågnivåobjekt. Dependency Injection med interface är ett sätt att följa denna princip. Dvs. om ett UserRepository är implementerat för att hantera objekt som implementerar IEntity snarare än konkreta Userobjekt så följer vi denna princip. Ett annat sätt att uttrycka denna princip som man relativt ofta hör är Depend on abstractions, not concretions/implementation. Denna princip medför att förändringar och återanvändning av kod blir enklare att genomföra. Koden kommer troligtvis också bli enklare att underhålla.
3 Ursprungligen är de avsedda för objektorienterad programmering, men principerna kan, när man förstår dem, i väldigt stor utsträckning användas även i programspråk som inte har ett starkt stöd för objektorientering. Det skall också nämnas att man väldigt ofta använder SOLID som ett verktyg för analys inför refactoring. Personligen tycker jag inte det är så viktigt att lära sig exakt vad akronymen står för, det viktiga är att förstå anledningarna till att principerna används och att man kan applicera dessa tankesätt på sina implementationer (Om akronymen hjälper dig att komma ihåg principerna så är det ju dock bra ;) SOLID som helhet kan ta lite tid att få fullständig förståelse för (Se nästa stycke för en delförklaring till detta). Det kan därför vara bra att med jämna mellanrum fördjupa sig/repetera dessa principer. De är tänkta att appliceras på eller åtminstone övervägas för allt du implementerar, dvs. det är inte principer som är tänkta att plockas fram någon gång då och då eller för väldigt specifika ändamål. Lägg märke till att dessa principer i väldigt stor utsträckning syftar till förenklat underhåll av källkod (Detta är dock inte det enda syftet med dessa principer som ni kan utläsa ovan). Fördelarna med SOLID är därför ibland inte direkt uppenbara vid en implementation från scratch. Detta gör inte principerna mindre viktiga, som tidigare nämnt är underhåll av källkod normalt sett den överlägset mest kostsamma och tidskrävande delen av utveckling. Övningar Utgångspunkten för övningarna är v0.0 av Lektion32 repot. S Single Responsibility Principle (SRP) 1. Titta på klassen Models/Entities/User.cs Denna klass bryter mot SRP, då den har flera olika ansvarsområden. Vilka ansvarsområden har klassen? 2. Hur gör vi refactoring för att se till att klassen följer SRP? O Open/Closed Principle (OCP) 3. Ponera att Repository-klassen är testad, släppt till produktionsmiljö och anses stabil. Det har kommit in ett nytt krav att en metod, FindUserBy (string ) måste implementeras. Att implementera denna metod direkt i Repository-klassen hade brutit mot OCP. Finns det några andra anledningar till att det är en dålig idé att implementera denna metod direkt i Repository-klassen? 4. Hur implementerar vi denna metod samtidigt som vi följer OCP? (Tips: Låt en ny klass, UserRepository ärva från Repository<User> och implementera ett Interface, IUserRepository. Vad bör IUserRepository innehålla i det är fallet? Vad är det vi vill implementera?)
4 L Liskov Substitution Principle (LSP) Exempel för LSP blir lätt väldigt förenklade, till den grad att det är svårt att se någon riktig nytta med det (Se: A typical violation under ), eller så blir exemplen så avancerade att de är svåra att tränga in i. Vi använder här uppgift för att exemplifiera LSP. 5. Antag att vi innan vi implementerade UserRepository använde oss av Repository<User> på flera ställen i källkoden. Vad hade hänt om vi ersatt alla förekomster av Repository<User> med UserRepository? Hade detta lett till några oönskade beteenden i programmet? Har detta några fördelar? Följer vi LSP? 6. Hur hade vi kunnat bryta mot LSP i vår implementation av UserRepository? I Interface Segregation Principle (ISP) Under Models/ExportableDataSet ligger PageHitStatistics.cs och UserStatistics.cs. Tanken är att dessa klasser skall representera dataset som är underlag för olika typer av statistik för vår sida. Denna statistik skall kunna tas ut i olika format, t.ex. som PDF, Excel-rapport eller som ren text. Statistiken innehåller olika typer av objekt och har olika komplexitet, vilket gör att det inte är lämpligt att exportera samtliga typer av dataset till samtliga typer av rapporter/filtyper. I detta fallet så antar vi att UserStatistics är väldigt komplex och ej lämpligt att ta ut i något annat format än Excel, medans PageHitStatistics är ganska enkel och lämplig att ta ut i graf-form, antingen som en bild eller PDF. När implementationen gjordes så bestämdes det att alla implementationer skall ske mot interface (IExportableSet.cs) för att göra det enkelt att senare utöka antalet rapporter. Förutom metoder för att exportera till Excel, Image och PDF så lades det även till metoder för att exportera till SQL, Text och CSV för att framtidssäkra applikationen. I PageHitStatistics.cs och UserStatistics.cs representerar metoder som är implementerade med new NotImplementedException(); exporter som ej skall vara möjligt att göra för det aktuella datasetet. Övriga metoder representerar fullständiga implementationer. 7. På vilket sätt bryter denna implementation mot ISP? Vilka problem innebär detta? 8. Hur kan vi göra refactoring av denna implementation för att följa ISP? ( int COUNT() - metoden är tänkt att vara implementerad för samtliga implementationer av dessa statistikset). 9. Är framtidssäkringen i form av abstrakta metoder för export till SQL, Text och CSV en bra idé? OBS! Lägg märke till att Implementationerna under ExportableSet potentiellt bryter mot SRP (Detta beror lite på hur den faktiska implementationen ser ut men spontant ser det ut som att klasserna både ansvarar för att representera data och exportera data). En lösning på detta (det finns fler) hade t.ex. kunnat vara att ta bort alla export-metoder både ur interfacen och klasserna i Exportable Dataset.
5 Vi bygger sedan en ny klass StatisticsExporter som innehåller ett antal statiska metoder för de olika typerna av exporter vi har. T.ex. StatisticsExporter.ExportToPDF(IPDFExportable statisticstoexport) Där de ExportableDataSet som skall kunna exporteras till PDF implementerar interfacet IPDFExportable. Man hade också kunna tänka sig något i stil med StatisticsExporter.Export(ExportStrategy.PDF, statisticstoexport) för en något mer dynamisk lösning. Jag ville dock hålla exemplet så enkelt som möjligt i förevisningssyfte, så jag har bortsett från att vi bryter mot SRP här. D Dependency Inversion Principle (DIP) DIP innebär helt enkelt i praktiken att klasser inte bör vara beroende på konkreta implementationer av andra klasser, utan istället av Interface. Vi har tidigare i kursen sett hur denna princip kan användas för att snabbt ändra vilken implementation av repository man vill använda (DB- eller testimplementation) m.h.a. Dependency Injection, Interface och Ninject. 10. Förklara på vilket sätt en Ninject-binding av Repository använder sig av DIP (Du kan titta på NinjectControllerFactory.AddBindings + Konstruktorn i HomeController för ett exempel på detta. Hur hade en liknande implementation, som ej använder Ninject och inte följer DIP sett ut? (Tips: den privata variabeln i HomeController hade varit en konkretimplementation ej en interface-variabel). 11. Om du hade implementerat ett TestRepository som implementerar interfacet IRepository och velat använda denna implementation istället vad hade du behövt ändra för att detta repository skall användas av samtliga Controllers? (Tips: Det hade räckt att ändra en rad i NinjectControllerFactory.AddBindings-metoden) Länkar/Vidare läsning: Om du utgår från Wikipedia-sidan ( ) så kan du fördjupa dig något, men framförallt hitta vidare länkar och lästips om samtliga principer i SOLID. Vidare kan det vara intressant att läsa artiklar/böcker av Robert C. Martin. Det var Robert som myntade akronymet SOLID (även om han nödvändigtvis inte uppfann alla del-principer). Robert (eller Uncle Bob) har väldigt mycket att säga om SOLID, Software Craftmanship, agila metoder, etc. Robert C. Martin har varit väldigt tongivande för stora delar av den agila rörelsen och var även en av de som lanserade den agila rörelsen iom. Manifesto for Agile Software Development Man skall dock vara medveten om att han ofta är extremt kompromisslös och fast i sina principer Personligen gillar jag detta eftersom det tvingar mig att värdera/överväga det han säger, men det finns naturligtvis varierande åsikter kring detta.
JUnit. Ska kompletteras med kodexempel på JUnit. DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012
DD2385 Programutvecklingsteknik Några bilder till föreläsning 12 21/5 2012 Innehåll Testning med JUnit Refactoring Några designprinciper JUnit Ramverk i Java för testning av Java-klasser Utvecklat av Gamma
Läs merHT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN)
Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2013, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin Tentatid och plats Tillåtet på tentan EDAF10 Föreläsning inför XL-projektet
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design (DIT95) Niklas Broberg, 2018 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon
Läs merUML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda
Objektorienterad modellering och design (EDAF25) Föreläsning 3 UML Objektdiagram Agenda UML objekt och sekvensdiagram Design smells Designprinciper (ALP, SRP, OCP, DIP) (, Composite) Att göra denna och
Läs merStatic vs Dynamic binding Polymorfism. Objekt-orienterad programmering och design Alex Gerdes, 2016
Static vs Dynamic binding Polymorfism Objekt-orienterad programmering och design Alex Gerdes, 2016 Diagnostiskt prov Shape + overlaps(shape): int return 1; Shape shape = new Shape(); Polygon tripoly =
Läs merSammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Den här veckan Måndag: Retrospektiv övning, övning på gamla tentauppgifter Tisdag (idag): Retrospektiv
Läs merKursombud. Objektorienterad modellering och diskreta strukturer / design. Agile? Designprinciper EDAF10 EDA061. Lennart Andersson. Grupper för projekt
Kursombud Objektorienterad modellering och diskreta strukturer / design Designprinciper Lennart Andersson EDAF10 EDA061 Reviderad 2010 09 02 2010 OMD 2010 F2-1 Att göra Agile? OMD 2010 F2-2 Grupper för
Läs merObjekt-orienterad programmering och design. DIT953 Niklas Broberg, 2018
Objekt-orienterad programmering och design DIT953 Niklas Broberg, 2018 Kursteamet Niklas Broberg kursansvarig, föreläsare, examinator Johannes Åman Pohjola föreläsare Assistenter: Karin Wibergh Sarosh
Läs merObjektorienterad modellering och diskreta strukturer (EDAF10/EDA061)
Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2014, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin Tentatid och plats Tillåtet på tentan EDAF10 Föreläsning inför XL-projektet
Läs merObjekt-orienterad Programmering och Design. TDA551 Alex Gerdes, HT-2016
Objekt-orienterad Programmering och Design TDA551 Alex Gerdes, HT-2016 Kursteamet Dr. Alex Gerdes kursansvarig, föreläsare Dr. Niklas Broberg examinator, (föreläsare) Fredrik Sjöholm handledare Johan Andersson
Läs merObjekt-orienterad Programmering och Design. TDA552 Alex Gerdes, HT-2018
Objekt-orienterad Programmering och Design TDA552 Alex Gerdes, HT-2018 Kursteamet Dr. Alex Gerdes examinator och föreläsare (Dr. Niklas Broberg föreläsare) Handledare: Sólrún Halla Einarsdóttir Yazan Ghafir
Läs merFöreläsning 5. När skall man använda implementationsarv? När skall man använda implementationsarv?
När skall man använda implementationsarv? Föreläsning 5 När skall implementationsarv användas? The Open-Closed Principle (OCP) Liskov Substitution Principle (LSP) Implementationsarv är en konstruktion
Läs merUML Objektdiagram. Objektorienterad modellering och design (EDAF25) Föreläsning 3. UML Sekvensdiagram. UML Objektdiagram. Agenda
Objektorienterad modellering och design (EDAF25) Föreläsning 3 UML Objektdiagram Agenda UML objekt och sekvensdiagram Design smells Designprinciper (DRY, SRP, OCP, DIP) (, ) Att göra denna och nästa vecka:
Läs merFöreläsning 1, vecka 6: Abstraktion genom objektorientering
TDA 548: Grundläggande Programvaruutveckling Föreläsning 1, vecka 6: Abstraktion genom objektorientering Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Hur skulle ni implementera detta? (3D demo) Vi återkommer
Läs merModulär design. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Modulär design Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Separation of Concern principle Do one thing do it well. Separation of Concern är inte specifikt
Läs merObjektorientering/1.2. 3 Klasser
3 Klasser 3.1 Att hantera många objekt 3.2 Klasser 3.3 Krav för att bilda en klass 3.4 Får två objekt vara helt identiska? 3.5 Måste vi använda klasser i objektorientering? 3.6 En klassbeskrivning 3.7
Läs merIntroduktion. Klasser. TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder
Introduktion TDP004 Objektorienterad Programmering Fö 2 Objektorientering grunder OO är den mest använda programmeringsparadigmen idag, viktigt steg att lära sig och använda OO. Klasser är byggstenen i
Läs merSeparation of Concern. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Separation of Concern Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Modulär design Fördelar med välgjord modulär design: Lätt att utvidga Moduler går
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
Läs merUndantag, Sammanfattning och Tentamensinfo. Objekt-orienterad programmering och design Alex Gerdes, 2016
Undantag, Sammanfattning och Tentamensinfo Objekt-orienterad programmering och design Alex Gerdes, 2016 Saker går fel av många olika anledningar. Kass kod. Programmeraren har skrivit kod med buggar, som
Läs merPrinciples of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018
Principles of subclasses Objekt-orienterad programmering och design (DIT953) Niklas Broberg, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss
Läs merMjukvarudesign. Designprocessen. Teknisk design. Konceptuell design
RE SD PD I UT IT ST AT Mjukvarudesign System Requirement Specification Inkrementell och iterativ! Konceptuell design (VAD) Systemdesign (OOA) Arkitekturell (grovkornig, UML) Teknisk design (HUR) Programdesign
Läs merMer OOP. Variation i typ. Medlen repetition. Generiska klasser. Gränssnitt - Interface. Mer om klasser Några exempel UML
Målet Mer OOP Mer om klasser Några exempel UML Modularitet Språkligt modulära enheter Få gränssnitt Små gränssnitt Tydliga gränssnitt Dold information Återanvändbarhet Variation i typer Variation i datastrukturer
Läs merFöreläsning 8 - del 2: Objektorienterad programmering - avancerat
Föreläsning 8 - del 2: Objektorienterad programmering - avancerat Johan Falkenjack johan.falkenjack@liu.se Linköpings universitet Sweden December 4, 2013 1 Innehåll Arv och andra viktiga begrepp Abstrakta
Läs merModulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Modulär design Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Vad är ett bra program? I kursen pratar vi om bra kod utifrån ett utvecklar-perspektiv, dvs det som gör koden lätt
Läs merSänk kostnaderna genom a/ ställa rä/ krav och testa effektivt
Sänk kostnaderna genom a/ ställa rä/ krav och testa effektivt Kravhantering / Testprocess - Agenda AGENDA Grundläggande kravhanteringsprocess. Insamling, dokumentation, prioritering, Test och förvaltning
Läs merMutability och State. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Mutability och State Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Immutability Ett icke muterbart (immutable) objekt är ett objekt vars tillstånd inte
Läs merAnalys och design. Objekt. Klass. med hjälp av CRC. Klassdiagram
Analys och design med hjälp av CRC 83 Klassdiagram Objekt Ett objekt är en individuellt identifierbar entitet som kan vara konkret eller abstrakt. Ett objekt har tillstånd, beteende och identitet. Reellt,
Läs merViktiga programmeringsbegrepp: Kontrakt
jonas.kvarnstrom@liu.se 2017 Viktiga programmeringsbegrepp: Kontrakt Vad lovar {klassen, metoden, fältet}? Kontrakt 2 Kontrakt: Överenskommelse som anger Vad som ska tillhandahållas Vad som förväntas i
Läs merProjekt Rapport. RaidPlanner. Jeanette Karlsson UD10
Projekt Rapport RaidPlanner Jeanette Karlsson UD10 Abstrakt: Denna rapport handlar om mitt projekt i kursen Individuellt Mjukvaruutvecklings projekt. Rapporten kommer att ta upp hur jag gått tillväga,
Läs merF8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander
F8 - Arv ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Arv och subklasser Klasser innehåller attribut och beteenden En subklass ärver dessa från föräldern Detta ger: Återanvänd kod
Läs merPrinciples of subclasses. Objekt-orienterad programmering och design Alex Gerdes, 2018
Principles of subclasses Objekt-orienterad programmering och design Alex Gerdes, 2018 Implementation inheritance Subclassing, eller implementation inheritance (implementationsarv), ger oss två fördelar:
Läs merSeminarierna Instruktioner. Övningarna Viktiga relationer
Objektorienterad modellering och design (EDAF25) Föreläsning 3 Seminarierna Instruktioner Agenda UML objekt och sekvensdiagram Design smells Designprinciper (DRY, SRP, OCP, DIP) Att göra denna och nästa
Läs merObjekt, klasser. Tillstånd Signatur Kommunikation Typ. Fält, parametrar och lokala variabler. Konstruktorer Metoder DAVA15
DAVA15 Objekt, klasser Vad är det? Vad är sambandet mellan dem? Vad är skillnaden mellan dem? Tillstånd Signatur Kommunikation Typ Fält, parametrar och lokala variabler Likheter och skillnader Räckvidd
Läs merObjektorienterad programmering, allmänt
Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 juni 2005 1 Vilka egenskaper vill vi att program ska ha? Förslag (en partiell lista): De ska... gå snabbt att skriva vara
Läs merViktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt. Vilka egenskaper vill vi att våra program ska ha?
Viktiga egenskaper hos ett program (Meyer): Objektorienterad programmering, allmänt Sven-Olof Nyström Uppsala Universitet 17 mars 2005 1. Korrekthet 2. Robusthet 3. Utökbarhet 4. Återanvändbarhet 5. Kompatibilitet
Läs merObjektorienterad programmering
Objektorienterad programmering Emil Ahlqvist (c10eat@cs.umu.se) Didrik Püschel (dv11dpl@cs.umu.se) Johan Hammarström (c08jhm@cs.umu.se) Hannes Frimmel Moström (c10hml@cs.umu.se) 1 1. Introduktion 1.1 Objektorienterad
Läs merSeparation of Concern. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017
Separation of Concern Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Johannes Åman Pohjola, 2017 Modulär design Ett programsystem är för stort för att kunna förstås i sin helhet.
Läs merPROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar hur mjukvaror skapas, anpassas och utvecklas samt programmeringens roll i informationstekniska sammanhang som datorsimulering och praktisk datoriserad problemlösning.
Läs merVad är. Domändriven design?
Vad är Domändriven design? 1 Domändriven design är utvecklare och domänexperter som arbetar tillsammans för att skapa mjukvara som är både begriplig och möjlig att underhålla. ett sätt att fånga och sprida
Läs merProgrammering B med Visual C++ 2008
Programmering B med Visual C++ 2008 Innehållsförteckning 1 Repetition och lite nytt...5 I detta kapitel... 5 Programexekvering... 5 Loop... 5 Källkod... 6 Verktyg... 6 Säkerhetskopiera... 6 Öppna, kompilera,
Läs merGenerics och polymorfism. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Generics och polymorfism Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Live code Pair public class Pair { private A a; private B b; public A getfirst()
Läs merProgramutveckling med Java 7.5 p, ht 2007 (D0019N) STUDIEHANDLEDNING - ALLMÄN INFORMATION
Programutveckling med Java 7.5 p, ht 2007 (D0019N) STUDIEHANDLEDNING - ALLMÄN INFORMATION Hej, jag heter Ingela Johansson och hälsar dig välkommen till kursen Programutveckling med Java. Den är på 7.5
Läs merTentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.
Tentamen 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl 9.00 14.00, sal E33 Tentan har en teoridel och en problemdel. På teoridelen är inga hjälpmedel
Läs merManual för vanliga rapporter i Google Analytics
Dnr: Sid: 1 / 11 Universitetsförvaltningen Informationsavdelningen Manual vanliga rapporter i Google Analytics Version 1.2, uppdaterad 2012-05-30 Manual för vanliga rapporter i Google Analytics Innehåll
Läs merSyfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket?
Jonas Kvarnström jonkv@ida.liu.se 2013 Syfte : Lära sig objektorienterad programmering Syfte : Lära sig programmering i ett OO-språk vilket? Rena OO-språk (allt är objekt) Scala, Smalltalk, Eiffel, Ruby,
Läs merGenerics och polymorfism. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Generics och polymorfism Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Live code Pair public class Pair { private A a; private B b; public A getfirst() { return a; public
Läs merSKOLFS. beslutade den XXX 2017.
1 (11) Föreskrifter om ändring i Skolverkets föreskrifter (SKOLFS 2010:247) om ämnesplan för ämnet programmering i gymnasieskolan, inom kommunal vuxenutbildning på gymnasial nivå och inom vidareutbildning
Läs merComputer projekttid. Objektorienterad modellering och diskreta strukturer / design. Rapporter från verkligheten. EDAF10 i HT2
Computer projekttid Objektorienterad modellering och diskreta strukturer / design Inför tentamen Lennart Andersson Reviderad 2012 10 18 2012 2011 2012 timmar antal timmar 2 1 4 4 6 8 8 4 10 10 12 6 14
Läs merHT1 2015, FÖRELÄSNING 14 (INFÖR TENTAN)
Objektorienterad modellering och diskreta strukturer (EDAF10/EDA061) HT1 2015, FÖRELÄSNING 14 (INFÖR TENTAN) Dagens agenda Admin DS-föreläsning nästa torsdag 22/10 kl 13-15 Tentatid och plats Tillåtet
Läs merObjekt-orienterad programmering. Klassbegreppet och C++ UML. UMLs fördelar
Klassbegreppet och C++ OOP UML Klasser och objekt i C++ Uppdelning i filer Attribut och metoder Inkappsling - åtkomst Klassattribut - objektattribut Objekt-orienterad programmering Att använda ett objektorienterat
Läs merF9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander
F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt
Läs merAbstrakta Klasser 2. Kodning är bara en liten del i programvaruutvecklingen 6% 1% 6% Abstrakta Klasser - deklaration. Programutveckling sker i faser
Abstrakta Klasser 1 God klassdesign placerar gemensamma attribut och metoder så högt som möjligt i hierarkin men ibland kan dessa egenskaper inte definieras fullständigt Abstrakta klasser innehåller ofta
Läs merIntroduktion till programmering. Programspråk och paradigmer
Introduktion till programmering Programspråk och paradigmer Vad är ett programspråk? Aprogramming languageis a formal constructedlanguagedesigned to communicate instructions to a machine, particularly
Läs merTDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS
TDDC74 FÖRELÄSNING 9 ANDERS MÄRAK LEFFLER IDA/HCS 180226 Idag (ADT), OOP i Racket, labb 5 2 Allmän info Duggan. Laboration 4 deadline. Planering framöver Muddy cards (nästa timme) 3 Lite repetition ADT
Läs merPriskamp. En prisjämförelsesite Björn Larsson 130609
Priskamp En prisjämförelsesite Björn Larsson 130609 Abstrakt Detta är en post-mortem slutrapport om mitt projekt "Priskamp" inom ramen för kursen Individuellt Mjukvaruutvecklingsprojekt VT 2013. Projektets
Läs mer[SLUTRAPPORT: DRAWPIXLZ (ANDROID-APP)] Slutrapport. Författare: Zlatko Ladan. Program: Utvecklare av Digitala Tjänster 180P
Slutrapport Författare: Zlatko Ladan Program: Utvecklare av Digitala Tjänster 180P Kurs: Individuellt Mjukvaruprojekt Z l a t k o L a d a n Sida 1 Abstrakt: Denna rapport handlar om mitt projekt som jag
Läs merGeneric type declarations. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Generic type declarations Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Polymorfism Polymorfism är värdefullt ger hög grad av reuseability och extensibility. You know this by
Läs mer"Är en"-relation. "Har en"-relation. Arv. Seminarium 2 Relevanta uppgifter. I exemplet Boll från förra föreläsningen gällde
Föreläsning 7 "Har en"-relation Arv "Har en" "Är en" Superklassen Object Överskuggning Fordonsexempel Seminarium 2 Relevanta uppgifter Uppgift 31 I exemplet Boll från förra föreläsningen gällde följande
Läs merLEKTIONSTIPS. Lektionstips 2:4. Skribenten vill antingen uttrycka en åsikt för att få andra att reagera, eller
Lektionen är skriven av Theres Farcher lärare i svenska och svenska som andraspråk. Hon har kopplat lektionen till Svenska Direkt 7 grundbok och studiebok. Svenska Direkt är skriven av Cecilia Peña, Lisa
Läs merObjektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag
Läs mer725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack
725G61 - Laboration 7 Implementation av ett API Johan Falkenjack December 13, 2013 1 Inledning Hittills i kursen har vi tittat på grundläggande programmering och grundläggande objektorientering. I den
Läs merTDDD78, TDDE30, 729A Typhierarkier del 2 Vad krävs? Hur fungerar det?
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Typhierarkier del 2 Vad krävs? Hur fungerar det? Hur får en subtyp fungera egentligen? Krav på hierarkier 1 3 Får subtypen LinkedList sakna metoder från
Läs merArbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).
Arbeta med databas Översikt Arbeta med Entity Data Models. LINQ (Language Integrated Query). Lektion 1: Arbeta med Entity Data Models Introduktion till ADO.NET Entity Framework. Stöd i ADO.NET Entity Framework.
Läs merObjektorienterad programmering. Grundläggande begrepp
Objektorienterad programmering Grundläggande begrepp Hur beskriver vi objekt? Vill ha en representationsoberoende beskrivning Abstrakta datatyper! Data Operationer Objekt Representerar en verklig eller
Läs merWebbprogrammering, grundkurs 725G54
Webbprogrammering, grundkurs 725G54 Lab 4, 5 ERD PHP + MySQL Återblick Idag Sessions PHP och MySQL för samband Lab 6 725G54: Genomgång projektuppgift Avstämning av kursmål Om sessions På IDA måste ni göra
Läs merObjektorienterad programmering, Java, 5p TDBA63
UMEÅ UNIVERSITET Datavetenskap 030219 PRAKTISKT DELPROV Objektorienterad programmering, Java, 5p TDBA63 Datum : 030205 Tid : 9 13 Hjälpmedel : Allt. Kommunikation med andra personer (direkt eller indirekt)
Läs merTENTAMEN. Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg. VT-13 Datum: 13-06-05 Tid: kl 16.00-20.
Umeå Universitet Datavetenskap Anders Broberg 130605 TENTAMEN Kurs: Objektorienterad programmeringsmetodik 5DV133 Ansvarig lärare: Anders Broberg VT-13 Datum: 13-06-05 Tid: kl 16.00-20.00 Namn: Personnummer:
Läs merAvancerade Webbteknologier
Projektledning, Business Knowledge Användbarhet & Layout Avancerade Webbteknologier Lkti Lektion 1 Kommunikation Tobias Landén tobias.landen@chas.se Avancerade webbteknologier del 1 (4 KY poäng) Syfte
Läs merSlutrapport YUNSIT.se Portfolio/blogg
Slutrapport YUNSIT.se Portfolio/blogg RICKARD HANSSON 2012-06-04 Abstrakt Rapporten du har i din hand kommer handla om mitt projektarbete som jag genomfört under tio veckor för utbildningen Utvecklare
Läs merLaboration 2: Designmönster
Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om
Läs merF6 Objektorienterad design. ID1004 Objektorienterad programmering Fredrik Kilander
F6 Objektorienterad design ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se långa ord AKTIVITETER I PROGRAMVARUUTVECKLING Iterativ utveckling Kravspecifikation Design Implementation Testning
Läs merDesign Patterns. Objekt-orienterad programmering och design Alex Gerdes, 2016
Design Patterns Objekt-orienterad programmering och design Alex Gerdes, 2016 Vad är ett design pattern? Ett design pattern (designmönster) är en (ofta namngiven) generell lösning av en vanligt återkommande
Läs merTentamen i EDAF25. 1 juni Skrivtid: Skriv inte med färgpenna enda tillåtna färg är svart/blyerts.
Tentamen i EDAF5 juni 07 Skrivtid: 4-9 Skriv bara på ena sidan av pappret tentorna kommer att scannas in, och endast framsidorna rättas. Skriv inte med färgpenna enda tillåtna färg är svart/blyerts. Skriv
Läs merSLUTRAPPORT WEBBPROJEKT 1
SLUTRAPPORT WEBBPROJEKT 1 Kostregistrering 30 mars 2012 Webbprojekt 1 1DV411 Institutionen för datavetenskap, fysik och matematik Linnéuniversitetet Ella Källman - ella@kallman.se Martin Kuoppa - martin@duofy.com
Läs merKursplanering Objektorienterad programmering
Kursplanering Objektorienterad programmering Fakta Ämne Programmering Poäng 40 Yh-poäng Kurskod YSYS-OOP Klass Systemutvecklare.NET 2 Syfte och koppling till yrkesrollen Syftet är att få en stabil grund
Läs merObjektorienterad programmering
Objektorienterad programmering Aletta Nylén http://user.it.uu.se/~aletta Epost: aletta.nylen@it.uu.se Rum: 1216 Kursinfo Lärare: Aletta Nylén Jesper Wilhelmsson Litteratur: Object-Oriented Software Development
Läs merPROGRAMMERING. Ämnets syfte. Kurser i ämnet
PROGRAMMERING Ämnet programmering behandlar programmeringens roll i informationstekniska sammanhang som datorsimulering, animerad grafik, praktisk datoriserad problemlösning och användaranpassad konfiguration
Läs merInstuderingsuppgifter läsvecka 2
Instuderingsuppgifter läsvecka 2 1. 2. 3. 4. 5. 6. 7. 8. 9. En referensvariabel har både en statisk typ och en dynamisk typ. Förklara dessa båda begrepp! Förklara begreppet polymorfism. Förklara hur statisk
Läs merAgila Avtal. avtalsformer som kan fungera. Carina Meurlinger carina.meurlinger@agero.se
Agila Avtal Hur man säljer in agila projekt olika avtalsformer som kan fungera Carina Meurlinger carina.meurlinger@agero.se Min syn på saken och kundens Detta är vad vi alla önskar Lite om mig själv Carina
Läs merLaboration 2: Designmönster
Laboration 2: Designmönster Bakgrund Det har visat sig väldigt svårt att beskriva hur ett system, eller en dellösning, skall konstrueras på ett bra sätt. Det har överhuvud taget varit svårt att veta om
Läs merUML. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
UML Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 UML Unified Modelling Language Grafiskt modelleringsspråk för att beskriva olika aspekter av objektorienterade system. Vi kommer
Läs merInlämningsuppgift : Finn. 2D1418 Språkteknologi. Christoffer Sabel E-post: csabel@kth.se 1
Inlämningsuppgift : Finn 2D1418 Språkteknologi Christoffer Sabel E-post: csabel@kth.se 1 1. Inledning...3 2. Teori...3 2.1 Termdokumentmatrisen...3 2.2 Finn...4 3. Implementation...4 3.1 Databasen...4
Läs merVIDEODAGBOKEN. Individuellt Mjukvaruutvecklingsprojekt. En dagbok i videoform online. Robert Forsgren (rf222ce) UD12 2013-06-05
VIDEODAGBOKEN En dagbok i videoform online. Individuellt Mjukvaruutvecklingsprojekt Robert Forsgren (rf222ce) UD12 2013-06-05 Abstrakt: Den här rapporten kommer ta upp mitt projekt Videodagboken, en dagbok
Läs merÖvningsuppgift. Bankkonton. Steg 2. Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402
Övningsuppgift Bankkonton Steg 2 Författare: Mats Loock Kurs: Inledande programmering med C# Kurskod:1DV402 Upphovsrätt för detta verk Detta verk är framtaget i anslutning till kursen Inledande programmering
Läs merDen mobila användaren sätter traditionella säkerhetssystem ur spel
Den mobila användaren sätter traditionella säkerhetssystem ur spel eller Perimetern är död, get over it och se till att skydda upp dina användare utan att det påverkar deras dagliga arbete. Sebastian Zabala,
Läs merVanliga frågor för VoiceXpress
Vanliga frågor för VoiceXpress 1) Hur stort ordförråd (vokabulär) innehåller VoiceXpress? VoiceXpress innehåller ett mycket omfattande ordförråd, och svaret på frågan varierar en aning beroende på hur
Läs merPrinciper, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016
Principer, Patterns och Tekniker Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016 Live code DIT952.polygon AbstractPolygon # getpointswithbase(abstractpolygon) : List
Läs merPrinciper, Patterns och Tekniker. Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018
Principer, Patterns och Tekniker Objekt-orienterad programmering och design (DIT953) Niklas Broberg / Johannes Åman Pohjola, 2018 Live code DIT952.polygon AbstractPolygon + paint(graphics)
Läs merRune Tennesmed. Oskar Norling 1DV430. Individuellt Mjukvaruutvecklingsprojekt 1DV430 Webbprogrammerare H12 Oskar Norling
Rune Tennesmed Oskar Norling Individuellt Mjukvaruutvecklingsprojekt Webbprogrammerare H12 Oskar Norling 2012-05-30 Abstrakt Denna rapport handlar om mitt mjukvaruutecklingsprojekt som jag och en klasskompis
Läs merKort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel
Programmeringsteknik för Bio1 och I1 Övning 2 Kort repetition Övningsgrupp 3 (Sal E33) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1310/
Läs merDatorlaboration :: 1 Problembeskrivning ::
Datorlaboration :: Ett hyrbilsföretags problem Laborationen går ut på att lösa Labbuppgift 1 till 5. Laborationen redovisas individuellt genom att skicka laborationens Mathematicafil till Mikael Forsberg
Läs merSjälvhjälpsprogram för ADHD. Del 1 Att hitta din väg
Självhjälpsprogram för ADHD Del 1 Att hitta din väg Välkommen till vårt självhjälpsprogram för ADHD. Detta program ger dig verktygen att använda din ADHD som en superkraft för att hitta till ett bra liv..
Läs mer3. När kommer det att vara möjligt? Till sommaren? Vi måste gemensamt se över vad som vill göras, därefter kan vi göra en tidsplan.
FRÅGOR & SVAR IdrottOnline IOL januari 2012 1. Vi har en hemsida och administrationssystem som kräver lite underhåll och är anpassat till våra behov. Det gör att vi inte ser något behov av att ha något
Läs merLösningar till tentamen i EDAF25
Lösningar till tentamen i EDAF25 21 aug 2017 Lösning 1 Javaklasser (många varianter finns naturligtvis): class Client { private Invoker invoker; public void newcommand(string cmdtext) { Command cmd; if
Läs merOmsorgen Användarhandledning
Omsorgen Användarhandledning 2012-12-13 Steg 1: Logga in Om ditt boende/kommun är ansluten till Omsorgen har du troligtvis fått inloggningsuppgifter. Om inte, skicka ett mail till info@omsorgen.se så kontaktar
Läs merProjekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering...
Projekt i programmering 1 (ver 2)... 2 Projektidé... 2 Planering... 2 Genomförande... 2 Testning och buggar... 3 Utvärdering... 3 Planering... 4 Bussen (projektförslag)... 5 Bakgrund... 5 Klassen Buss
Läs merAjax TruClient. Erfarenheter, tips och trix från Swedbank IT. Christian Gerdes Performance Engineer, LIGHTS IN LINE AB
Ajax TruClient Erfarenheter, tips och trix från Swedbank IT Christian Gerdes Performance Engineer, LIGHTS IN LINE AB Intro Lite om Swedbanks Teknik Test Varför TruClient En ny teknik kräver ett nytt tänk
Läs merFördjupande uppsats i datalogi
Fördjupande uppsats i datalogi Design Patterns: Elements of Reusable Object-Oriented Software Inledning Jag har läst boken Design Patterns: Elements of Reusable Object-Oriented Software. Boken, som myntade
Läs merKopiering av objekt i Java
1 (6) Kopiering av objekt i Java Först När du läser detta papper bör du samtidigt studera dokumentationen för klasserna Object, Cloneable (java.lang) och ArrayList (java.util). Mycket blir klarare genom
Läs mer