Öppna kurser

Java - beprövade lösningar och designmönster

Under den här kursen lär du dig att använda bästa praxis för Java-programmering, att undvika fallgropar och använda branschstandarder för mjukvaruutveckling. Du lär dig att använda designmönster som beprövad lösning på återkommande problem och att tillämpa dialekt och mönster för att förbättra din Java-kod. Lös vanliga problem inom mjukvaruutveckling och leverera responsiva applikationer som är snabba och driftsäkra.

Utbildningsmål

Efter genomgången kurs ska deltagarna kunna:

  • Bygga pålitliga och skalbara Java-applikationer enligt bästa praxis
  • Effektivt tillämpa testdriven utveckling för att göra programmen lättare att underhålla
  • Lösa arkitektoniska problem med väl beprövade designmönster
  • Använda avancerade Java APIs för multitrådad programmering

Förkunskaper

  • Kunskap i nivå med det som lärs ut på kursen Introduktion till Java-programmering
  • 3 till 6 månaders erfarenhet av Java-programmering

Du bör även kunna:

  • Förstå Java-klasser, modellen för arv, polymorfism och inkapsling
  • Använda grundläggande standardversioner av Java API
  • Applicera objektorienterad analys och design, inklusive att definiera klasser och skapa objekt

Detaljerat kursinnehåll

Effektiv Java-programmering

  • Tydliggöra målen för bästa praxis
  • Identifiera de viktigaste egenskaperna hoshögkvalitativ programvara
  • Organisera klasser, paket och undersystem i lager
  • Designa enligt principerna för SOLID

Tillämpa testdriven utveckling

Utforska ett ramverk för testning

  • Sammanställa och underhålla Junit-tester
  • Dra nytta av avancerade Junit-funktioner
  • Testa i närvaro av undantag

Övervaka mjukvaruhälsan med loggningsbibliotek

  • Konfigurera loggning med log4j och SLF4J
  • Minimera loggningens påverkan på prestandan

Skapa matchers och mock objekts

  • Skriva anpassade Hamcrest-matchers
  • Testa med fake objects och mocks

Använda designmönster

Tillämpa vanliga designmönster

  • Observer
  • Iterator
  • Template method
  • Strategy
  • State
  • Singleton
  • Data Accessor Object
  • Data Transfer Object
  • Composite
  • ServiceLocator
  • Proxy
  • Factory

Refaktorisera äldre kod

  • Identifiera anledningar till byte av mjukvara
  • Tydliggöra mekanismerna i en förändring
  • Skriva tester till äldre klasser och metoder

Utöka applikationer med Java meta-programmering

Förbättra typsäkerhet med generiska typer och uppräkningstyper

  • Skapa generiska klasser och metoder
  • Navigera i generiska klasshierarkier
  • Implementera uppräkningstyper för fasta uppsättningar konstanter

Lägga till metadata genom att skriva annotationer

  • Utnyttja de inbyggda och anpassade annotationerna
  • Kommentera med meta-annotationer

Modifiera körtidsbeteendet med reflektion

  • Dynamiskt hämta klass- och metoddata
  • Flagga metoder med namngivningskonventioner
  • Lägga till information till kod med annoteringar
  • Bedöma nackdelar med reflektion

Optimera för maximal prestanda

Mäta och förbättra prestandan

  • Bedöma svarstiden
  • Utföra belastnings- och stresstester
  • Specificera strategier för att förbättra prestandan

Använda skräpinsamlare

  • Utforska mått på skräpinsamling
  • Välja lämpliga algoritmer för skräpinsamling
  • Undvika faror med finalizer
  • Förhindra minnesläckor med referenstyper

Utnyttja trådar fullt ut

  • Skriva pålitlig, trådsäker kod
  • Undvika kapplöpningssituationer och dödlägen
  • Använda ramverket Executors

Säkra en trådad applikation

  • Synkronisera och dela data mellan trådar
  • Hantera prestanda och synkronisering

Utforska alternativ till synkronisering

  • Dra nytta av den volatila modifieraren
  • Eliminera datadelning med ThreadLocal-variabler

Skapa arkitektur för Separation of Concerns

Tilldela ansvar till komponenter

  • Översätta metodanrop med Adaptor-mönstret
  • Lägga till beteende med en Proxy

Centralisera skapandet av objekt

  • Använda fabriker för att uppnå loose coupling
  • Implemenera Inversion of Control (IoC)