Exempel på UML-diagram för mjukvaruprojektdesign

En snäv deadline pressar ditt mjukvaruprojekt, med komplexa arbetsflöden och ett team som kämpar för att hålla sig på samma sida. Missförstånd och skiftande krav börjar störa framstegen – låter det bekant?

Det är här UML-diagram kan göra hela skillnaden. ✨

UML-diagram introducerades på 1990-talet av Rational Software Corporation och erbjuder ett enhetligt sätt att modellera och designa system, vilket helt förändrar hur du visualiserar mjukvaruarkitektur.

Följ med när vi går igenom viktiga exempel på UML-diagram, steg-för-steg-vägledning om hur du implementerar dem och verktyg som hjälper dig på vägen. 💻

Vad är UML-diagram?

UML-diagram (Unified Modeling Language) är visuella ritningar som används för att illustrera systemens struktur och beteende, särskilt inom mjukvaruutveckling och projektledning.

Tänk på UML som ett språk som låter mjukvaruutvecklare, designers och affärsanalytiker tala samma visuella språk för att förtydliga komplexa processer.

Här är de viktigaste elementen och innehållet som vanligtvis finns i UML-diagram:

  • Klasser: Definiera objekt, deras attribut och relationer
  • Objekt: Instanser av klasser med specifika data
  • Aktiviteter: Representera jobb, uppgifter eller operationer inom systemet
  • Komponenter: Oberoende delar av systemet med specifika funktioner
  • Gränssnitt: Definiera hur komponenter kommunicerar med varandra
  • Relationer: Visa kopplingar mellan klasser, komponenter eller aktiviteter (t.ex. arv, beroende).
  • Tillstånd: Olika tillstånd eller faser för ett objekt under dess livscykel.

Varje typ av UML-diagram använder en kombination av dessa element för att fånga systemets statiska struktur eller dynamiska beteende.

Ursprungligen skapades UML för att standardisera många befintliga metoder för mjukvarudesign. Idag hjälper det utvecklare att visualisera allt från hur enskilda komponenter fungerar tillsammans till hur systemet interagerar med användare och andra system.

För yrkesverksamma inom mjukvaruutveckling eller affärsanalys ger UML en omfattande förståelse för objektorienterad design, vilket hjälper team att skapa tydligare och mer organiserad dokumentation.

Viktiga typer av UML-diagram

UML-diagram kan delas in i två huvudkategorier, som var och en ger en unik inblick i systemdesign: strukturella diagram och beteendediagram.

  • Strukturdiagram: Dessa diagram visar statiska delar av ett system – dess kärnkomponenter, relationer och organisation. De ger en ögonblicksbild av arkitekturen och illustrerar hur olika delar hänger ihop. Strukturella UML-diagram är särskilt användbara för att se helheten.
  • Beteendediagram: Beteendediagram fångar däremot de dynamiska aspekterna av ett system och visar hur komponenter interagerar med varandra och reagerar på indata. Dessa diagram visar processerna och arbetsflödena inom systemet, till exempel användarinteraktioner eller dataflöden. De kartlägger systemets funktionalitet och användarupplevelser.

Tillsammans gör dessa processkartläggningstekniker det enklare att visualisera, designa och underhålla programvara genom att visa både "vad" (struktur) och "hur" (beteende) ett system fungerar. Denna helhetssyn förbättrar samarbetet, hjälper till att identifiera problem tidigt och stödjer en mer effektiv utveckling.

Här är en kort översikt över olika typer av UML-diagram inom de två kategorierna och hur varje diagram passar in i UML-ramverket:

UML-diagramtypKategoriÖversikt
KlassdiagramStrukturellDefinierar systemklasser, klassattribut, operationer och relationer.
ObjektdiagramStrukturellVisar instanser av klasser vid en specifik tidpunkt för en ögonblicksbild av verkligheten.
Sammansatt strukturdiagramStrukturellBeskriver den interna strukturen och samarbetet inom komponenterna.
KomponentdiagramStrukturellRepresenterar fysiska komponenter och deras beroenden
DistributionsdiagramStrukturellKopplar mjukvarukomponenter till hårdvara och illustrerar systemdistribution.
PaketdiagramStrukturellOrganiserar klasser och element i paket och anger beroenden.
ProfildiagramStrukturellAnpassa UML efter specifika behov genom att definiera stereotyper och tillägg.
AktivitetsdiagramBeteendeModellerar dynamiska arbetsflöden med aktiviteter, övergångar och beslut
AnvändningsfallsdiagramBeteendeIllustrerar systemfunktioner ur användarens perspektiv med aktörer och användningsfall.
SekvensdiagramBeteendemässigtFångar ordningen på meddelanden som flödar mellan objekt över tid.
KommunikationsdiagramBeteendeFokuserar på interaktioner mellan objekt och visar vägar för meddelandeutbyte.
TillståndsmaskindagramBeteendemässigtVisar tillstånd och övergångar för ett objekt som svar på händelser.
TidsschemaBeteendemässigtVisar objektens tillstånd över tid, med fokus på tidsbegränsningar.
Översiktsdiagram över interaktionBeteendemässigtKombinerar sekvens- och aktivitetsdiagramelement för komplexa scenarier.

11 exempel på UML-diagram

Att förstå UML-diagram kan verka skrämmande i början, men genom att bryta ner dem blir det lättare att förstå hur de kan förbättra dina projekt.

Var och en av dessa diagram har sina unika styrkor. Låt oss dyka in i vad varje diagram gör, hur det ser ut och var det passar bäst.

1. UML-klassdiagram

Som ett statiskt strukturdiagram fungerar klassdiagrammet som en ritning för ett objektorienterat system. Det belyser viktiga grundläggande element såsom:

  • Klasser: Definierar systemenheter
  • Attribut: Anger data som finns i varje klass.
  • Operationer: Detaljerade funktioner associerade med varje klass
  • Relationer: Visar kopplingar och beroenden mellan klasser
Klassdiagram i Unified Modeling Language (UML) från UML Diagrams.org
via: UMLDiagrams.org

När du designar applikationer som e-handelsplattformar eller innehållshanteringssystem förenklar klassdiagram komplexa relationer, vilket hjälper utvecklare och intressenter att förstå hur kärnkomponenterna kommer att interagera.

📌 Användningsfall: Modellerar strukturen för en e-handelsplattform med enheter som produkt, order och kund, tillsammans med deras attribut och relationer.

Visualisera, dokumentera och spåra komplexa objektorienterade system med ClickUps UML-klassdiagrammall.

ClickUp UML-klassdiagrammall är ett intuitivt verktyg som är utformat för att effektivisera modellering för objektorienterade system, vilket gör det enkelt att visualisera klasser, attribut och relationer samtidigt som ditt team håller sig på samma sida. Med den här mallen kan du:

  • Arbeta med ditt team på ett enda diagram och gör uppdateringar och ändringar i realtid så att alla är synkroniserade.
  • Spåra och jämför enkelt olika systemversioner, vilket garanterar flexibilitet när kraven förändras.
  • Tagga, kombinera deluppgifter och lägg till flera ansvariga och prioritetsetiketter för att förbättra spårning och prioritering.

2. UML-diagram över sammansatt struktur

Ett sammansatt strukturdiagram fungerar som ett internt strukturdiagram och ger en inblick i en viss komponent eller klass för att se hur dess delar fungerar tillsammans. Dess viktigaste element är:

  • Delar: Representerar interna objekt eller klasser som utgör en komponent.
  • Portar: Interaktionspunkter på en komponent som möjliggör kommunikation med andra objekt.
  • Anslutningar: Illustrerar kopplingarna mellan delar och portar.
  • Roller: Anger de funktioner som delarna fyller inom den sammansatta strukturen.
UML-kompositstrukturdiagram: Exempel på UML-diagram
via: Smartdraw

Till skillnad från högnivådiagram som fokuserar på breda interaktioner, dyker sammansatta strukturdiagram in i en komponents interna organisation och illustrerar relationerna mellan dess delar, portar och anslutningar. De avslöjar vad en komponent gör och hur den fungerar genom att samordna dess interna element.

📌 Användningsfall: Beskriver den interna organisationen av en bilklass, inklusive delar som motorer och bromsar för komplex komponentkommunikation.

3. UML-aktivitetsdiagram

Aktivitetsdiagram illustrerar arbetsflöden och affärsprocesser genom att dela upp dem i:

  • Aktiviteter: Steg eller åtgärder som utförs
  • Övergångar: Övergång från en aktivitet till en annan
  • Beslutspunkter: Villkorliga grenar som styr flödet baserat på resultat
UML-aktivitetsdiagram: Exempel på UML-diagram
via: ResearchGate

Aktivitetsdiagram är perfekta för att modellera processer som försäljningspipelines, projektgenomförande eller produktionssteg för produkter. De ger en överblick över arbetsflöden, vilket gör det enklare att identifiera effektivitetsvinster och effektivisera processer. Detta är viktigt för team som behöver förstå operativa flöden och beslutspunkter inom ett system.

📌 Användningsfall: Beskriver en banks arbetsflöde för godkännande av lån, med varje steg från ansökan till utbetalning av lånet för ett effektiviserat processflöde.

4. UML-användningsfallsdiagram

Ett användningsfallsdiagram ger en dynamisk bild av ett systems funktionalitet, med fokus på:

  • Aktörer: Individer eller system som interagerar med huvudsystemet.
  • Användningsfall: Funktioner eller uppgifter som utförs inom systemet
  • Associationer: Relationer som visar hur aktörer interagerar med användningsfall.
UML-användningsfallsdiagram: Exempel på UML-diagram
via: GenMyModel

Dessa diagram är ovärderliga under projektplaneringsfasen, där intressenter, affärsanalytiker och utvecklare kan visualisera användarinteraktioner och säkerställa att väsentliga funktioner beaktas. Oavsett om du bygger en mobilbankapp eller ett HR-hanteringsverktyg, erbjuder användningsfallsdiagram en tydlig vägkarta över användarnas behov.

📌 Användningsfall: Definierar användarinteraktioner för en patientportal inom hälso- och sjukvården, som omfattar uppgifter som att boka tid och visa testresultat.

5. UML-sekvensdiagram

Sekvensdiagram fångar flödet av meddelanden i en viss process och belyser:

  • Objekt: Deltagare i sekvensen
  • Meddelanden: Kommunikation mellan objekt
  • Aktiveringsfält: Visar när ett objekt är aktivt under interaktionen.
UML-sekvensdiagram: Exempel på UML-diagram
Via: IBM Developer

Sekvensdiagram visar meddelandeflöden och deras ordning i detalj, vilket hjälper utvecklare och designers att säkerställa smidig kommunikation mellan systemkomponenter. Detta är särskilt användbart i processer som användarinloggningssystem eller betalningshantering, där exakt timing och händelseordning är avgörande.

📌 Användningsfall: Kartlägger inloggningssekvensen i en mobilapp och visar meddelandeflödet mellan användaren och servern för att säkerställa korrekt timing för begäran.

👀 Bonus: Hitta den bästa flödesschemaprogramvaran för att visualisera dina idéer på ett tydligt sätt.

6. UML-tillståndsmaskindagram

Tillståndsdiagram visar ett objekts livscykel genom att fokusera på:

  • Tillstånd: Olika tillstånd som ett objekt kan befinna sig i.
  • Övergångar: Händelser som utlöser tillståndsförändringar
  • Händelser: Åtgärder som orsakar tillståndsövergångar
UML-tillståndsmaskindagram: Exempel på UML-diagram
via: Sparx Systems

Denna typ av diagram är särskilt användbar i applikationer där objektets livscykel är komplex, såsom orderhantering eller prenumerationstjänster. Tillståndsdiagram hjälper dig att förutsäga hur objekt flyttas från ett tillstånd till ett annat, vilket säkerställer smidiga övergångar och korrekt hantering av tillstånd.

📌 Användningsfall: Illustrerar livscykeln för en order och belyser övergångar mellan olika statusar, såsom placerad, skickad och levererad.

7. UML-objektdiagram

Objektdiagram liknar klassdiagram men fångar instanser vid ett visst ögonblick och visar:

  • Objekt: Specifika instanser av klasser
  • Attribut och värden: Detaljer om varje objekt vid en given tidpunkt
  • Länkar: Kopplingar mellan instanser
UML-objektdiagram: Exempel på UML-diagram
via: EdrawMax

Objektdiagram används ofta för testning och felsökning och hjälper team att visualisera hur verkliga exempel på objekt interagerar inom systemet, vilket gör det möjligt för utvecklare att verifiera noggrannheten i en ögonblicksbild av systemets tillstånd vid en viss tidpunkt.

📌 Användningsfall: Fångar en ögonblicksbild av instanser i en e-handelskassa och visar realtidsrelationer mellan kundvagn, produkt och kund.

8. UML-distributionsdiagram

Distributionsdiagram modellerar ett systems hårdvaru- och mjukvarukomponenter och deras interaktioner. De kartlägger den fysiska distributionen av mjukvara, med fokus på:

  • Noder: Hårdvara eller fysiska enheter där programvaran finns
  • Artefakter: Programvaruelement som distribueras till noder
  • Kommunikationsvägar: Anslutningar mellan noder
UML-distributionsdiagram: Exempel på UML-diagram
via: ScienceDirect

Distributionsdiagram är viktiga för distribuerade system eller molnapplikationer. De visar hårdvaru- och mjukvarukonfigurationen och hjälper IT-proffs att se hur resurserna fördelas, vilket är avgörande för effektiv systemskalning, lastbalansering och underhåll.

📌 Användningsfall: Visualiserar distributionskonfigurationen för en webbapplikation och kartlägger noder som webbserver och databas för en organiserad infrastruktur.

9. UML-paketdiagram

Paketdiagram organiserar modellelement i grupper eller ”paket” och visar paketberoenden. Två viktiga element i detta UML-diagram är:

  • Paket: Logiska grupperingar av relaterade klasser eller komponenter
  • Beroenden: Relationer mellan paket
UML-paketdiagram: Exempel på UML-diagram
via: Smartdraw

Dessa diagram är avgörande i stora system med flera moduler, eftersom de hjälper utvecklare och arkitekter att se organisationen och beroenden inom projektet.

För programvara på företagsnivå underlättar paketdiagram hanteringen av komplexitet genom att gruppera relaterade element, vilket främjar en modulär och underhållsbar struktur.

📌 Användningsfall: Organiserar ett företagssystem i logiska paket (t.ex. autentisering, betalning) och klargör beroenden inom stora projekt.

10. UML-kommunikationsdiagram

Kommunikationsdiagram fokuserar på interaktionerna mellan objekt eller delar, med betoning på deras relationer och höjdpunkter:

  • Objekt: Enheter som är involverade i interaktionen
  • Meddelanden: Kommunikation som utbyts
  • Länkar: Vägar som visar hur meddelanden färdas
UML-kommunikationsdiagram: Exempel på UML-diagram
via: Visual Paradigm

Dessa diagram ger en förenklad bild av kommunikationsflödet, vilket gör dem idealiska för system med komplexa interaktioner, såsom chattapplikationer eller kundtjänstplattformar.

De hjälper till att säkerställa att varje objekt skickar och tar emot information som förväntat, vilket främjar smidiga interaktioner inom systemet.

📌 Användningsfall: Detaljerade interaktioner i ett orderhanteringssystem som visar meddelandeflödet mellan objekt som order, betalning och lager.

11. UML-komponentdiagram

Komponentdiagram kartlägger den fysiska strukturen i ett mjukvarusystem och bryter ner huvudkomponenterna och deras beroenden. Det fokuserar främst på:

  • Komponenter: Innehåller centrala byggstenar såsom bibliotek, körbara filer eller moduler som representerar olika delar av systemet.
  • Gränssnitt: Definierar åtkomstpunkter för komponenter och illustrerar hur de interagerar med andra komponenter.
  • Portar: Ger mer detaljerad information om specifika interaktionspunkter.
  • Noder: Representerar fysisk hårdvara/enheter på vilka programvarukomponenterna kommer att köras.
UML-komponentdiagram: Exempel på UML-diagram
via: Wittij Consulting

Detta diagram är särskilt användbart i storskaliga applikationer för att planera och kommunicera arkitektur.

📌 Användningsfall: Kartlägger en SaaS-plattforms kärnkomponenter, såsom användargränssnitt, databas och API, för effektiv planering av systemarkitekturen.

💡Proffstips: Lägg till korta beskrivningar eller kommentarer bredvid diagrammen. Denna ytterligare kontext kan hjälpa både din tekniska och icke-tekniska publik att tolka diagrammen korrekt.

Implementering av UML-diagram: tips och bästa praxis

Är du redo att förverkliga dina idéer med UML-diagram?

Även om arbetsflödesprogramvara och onlineverktyg som Lucidchart och Microsoft Visio erbjuder inbyggda UML-former och mallar för att skapa diagram, saknar de ofta de samarbetsfunktioner som gör teamarbetet smidigt.

Det är där ClickUp, allt-i-ett-appen, kommer in i bilden.

Genom att implementera UML-diagram med ClickUp blir det enkelt att kartlägga system och hålla allt tydligt och hanterbart. Låt oss se hur.

Steg-för-steg-guide för att skapa UML-diagram i projekt

Steg 1: Definiera syfte och omfattning

Börja med att beskriva vad diagrammet ska representera, till exempel en klassstruktur för en app eller en affärsprocess.

Du måste definiera det specifika syftet och omfattningen för att ditt UML-diagram ska vara fokuserat och relevant.

📮ClickUp Insight: Kontextväxlingar tär tyst på ditt teams produktivitet. Vår forskning visar att 42 % av störningarna på jobbet beror på att man måste jonglera mellan olika plattformar, hantera e-post och hoppa mellan möten. Tänk om du kunde eliminera dessa kostsamma avbrott?

ClickUp förenar dina arbetsflöden (och chatt) under en enda, strömlinjeformad plattform. Starta och hantera dina uppgifter från chatt, dokument, whiteboards och mer – samtidigt som AI-drivna funktioner håller samman sammanhanget, gör det sökbart och hanterbart!

Steg 2: Identifiera viktiga klasser

Klasser representerar primära komponenter i ditt system, såsom Användare, Produkt eller Order.

Med ClickUp Whiteboards kan du skapa UML-komponenter och etablera relationer med hjälp av former, frihandsteckning och länkningsverktyg. Du kan också helt enkelt dra och släppa element för att koppla ihop dem och skapa omfattande systemstrukturer.

  • Klassnotation: Använd en rektangel uppdelad i tre sektioner för varje klass.
  • Överst: Klassnamn, med versaler (Användare)
  • Mitten: Attribut (egenskaper)
  • Nederst: Metoder (åtgärder eller funktioner)
Använd ClickUp Whiteboards för att skapa märkta rutor för varje klass: Exempel på UML-diagram
Använd ClickUp Whiteboards för att skapa märkta rutor för varje klass.

Steg 3: Lägg till attribut

Attribut definierar data som finns i varje klass. I en användarklass kan du till exempel inkludera attribut som användarnamn, e-postadress och roll.

Rita kopplingar mellan former medan du skapar UML-diagram med ClickUp Whiteboards: Exempel på UML-diagram
Rita kopplingar mellan former medan du skapar UML-diagram med ClickUp Whiteboards.

Använd Whiteboards textfunktion för att lägga till attribut under varje klass. För att ge mer detaljer, lägg till bilder, länkar och ytterligare resurser. Ladda upp visuella hjälpmedel och länkar till relaterade dokument för att hålla allt tillgängligt i ditt UML-diagram.

Synlighetsmodifierare:

  • + (Offentligt): Tillgängligt för andra klasser
  • – (Privat): Endast tillgängligt inom klassen
  • # (Skyddad): Tillgänglig för klassen och dess underklasser
  • ~ (Paket): Tillgängligt inom samma paket

ClickUp har verktyg för att visualisera dina processer, mål osv. Det är det bästa inom samarbetsverktyg och har förbättrats ytterligare, särskilt med tillägget av Whiteboard View

ClickUp har verktyg för att visualisera dina processer, mål osv. Det är det bästa inom samarbetsverktyg och har förbättrats ytterligare, särskilt med tillägget av Whiteboard View

Steg 4: Definiera metoder

Identifiera de åtgärder eller beteenden som varje klass kommer att utföra för att definiera sina metoder. Metoder beskriver hur klassen fungerar, vilket gör det möjligt för den att interagera med andra klasser eller utföra specifika funktioner inom systemet.

Använd detta format för att definiera metoder:

  • methodName(parameter: Type): ReturnType

Till exempel:

  • processPayment(belopp: Float): Boolean

Steg 5: Skapa relationer

Med ClickUp Whiteboards kan du enkelt visa viktiga UML-relationer med enkla visuella hjälpmedel:

  • Association (enkel länk): En heldragen linje som förbinder klasser
  • Arv (generalisering): En heldragen linje med en ihålig pil som pekar från underklassen till överklassen.
  • Aggregation (helhet-del): En heldragen linje med en ihålig romb som förbinder en ”helhet” med dess ”delar”.
  • Komposition (stark inneslutning): En heldragen linje med en fylld romb, som visar att en del inte kan existera utan helheten.

Steg 6: Lägg till multiplikationsnotationer

Definiera antalet instanser i relationer, till exempel ”en-till-många”. Du kan lägga till textetiketter på relationslinjer.

Vanliga multiplikationer:

  • 1 (Exakt en)
  • 0.* (Noll eller många)
  • 1.* (En eller flera)

Steg 7: Utarbeta och förfina

När den initiala layouten är på plats kan du lägga till djup med ClickUp Mind Maps för att koppla samman attribut, metoder och beroenden. Detta steg gör det möjligt för dig att organisera klasser och få en bredare bild av systemets struktur.

Med funktionen Re-Layout kan du enkelt justera layouten på din Mind Map. Detta säkerställer en tydlig struktur, vilket gör det enklare att upprätthålla hierarkin och prioritera element.

Du kan också välja mellan tomt läge för obegränsad brainstorming och uppgiftsläge för att organisera projektelement.

Omorganisera noder i ClickUp Mind Maps och förbättra effektiviteten i UML-diagram: Exempel på UML-diagram
Omorganisera noder i ClickUp Mind Maps och förbättra effektiviteten i UML-diagram.

🔍 Visste du att? Airbnbs teknikteam använder UML-diagram, särskilt klass- och sekvensdiagram, för att hantera komplexa interaktioner mellan användare, värdar och annonser.

ClickUp UML-aktivitetsmall

ClickUps UML-aktivitetsmall är utformad för att hjälpa dig att skapa och hantera UML-diagram (Unified Modeling Language).

Om du letar efter ännu fler skäl att välja ClickUp, gör ClickUp UML-aktivitetsdiagrammall det enkelt att visualisera arbetsflöden med intuitiva dra-och-släpp-verktyg. Du kan också samarbeta i realtid med ditt team för att förfina ditt arbetsflöde.

Oavsett om du arbetar med användarberättelser eller projektplanering hjälper den här mallen dig att hålla allt organiserat på ett ställe.

👀 Bonus: Utforska ytterligare UML-diagrammallar som hjälper dig att kartlägga dina idéer, förenkla komplexa system och arbeta bättre med ditt team.

Vanliga fallgropar i UML-diagram och hur man undviker dem

UML-diagram kan vara kraftfulla verktyg, men det är lätt att göra misstag. Här är några vanliga fallgropar att se upp för när du arbetar med UML-diagram, tillsammans med tips som hjälper dig att undvika dem.

  • Komplexitet: UML-diagram kan bli överväldigande, särskilt när det gäller stora och komplicerade system. Håll dina diagram så enkla som möjligt för att bibehålla tydligheten.
  • Tvetydighet: Om de inte utformas noggrant kan UML-diagram leda till missförstånd om systemkrav och design. Sträva efter precision i din notation för att förmedla tydliga betydelser.
  • Statisk representation: UML-diagram erbjuder främst statiska vyer av system, som kanske inte fångar dynamiska eller realtidselement. Överväg att komplettera dina diagram med andra dynamiska verktyg för att skildra dessa aspekter.
  • Inlärningskurva: Komplexiteten i UML-notationen och mångfalden av diagramtyper kan vara avskräckande för nybörjare. Tillhandahåll utbildning, resurser och ett UML-diagramprogram för att hjälpa teammedlemmarna att komma igång.

Förbättra din projektdesign med ClickUp

UML-diagram gör det möjligt att kartlägga olika aspekter av ett mjukvarusystem och visuellt bryta ner de komponenter, processer och relationer som får ett projekt att fungera.

Genom att förstå olika exempel på dessa diagram kan du välja det bästa för att skapa en objektorienterad design.

För att förbättra din upplevelse av UML-diagram kan du använda ClickUp Whiteboards för att brainstorma och samarbeta i realtid. Mind Maps erbjuder ett strukturerat sätt att bryta ner komplexa processer och hålla ordning på ditt projekt.

Registrera dig på ClickUp idag och upptäck hur våra samarbetsverktyg kan skapa klarhet i din utvecklingsprocess.

ClickUp Logo

En app som ersätter alla andra