Java Challenge (eBook)
599 Seiten
dpunkt (Verlag)
978-3-96910-029-5 (ISBN)
Ihr persönlicher Java-Coach !
- Ihr Java-Trainingsbuch mit Musterlösungen
- Lernen Sie Tipps und Kniffe vom Java-Experten kennen
- Erweitern Sie Ihr Java-Knowhow in praxisrelevanten Bereichen
Dieses Buch bietet Ihnen ein breit gefächertes Spektrum
von über 100 Übungsaufgaben und Programmierpuzzles
inklusive Lösungen zum Knobeln und Erweitern Ihrer
Kenntnisse zu unterschiedlichen praxisrelevanten
Themengebieten wie Arrays, Datenstrukturen, Rekursion,
Date and Time API usw.
Jedes Themengebiet wird in einem eigenen Kapitel
behandelt, das zunächst mit einer Einführung in die
Grundlagen beginnt. Danach finden sich zumeist
10 bis 15 Übungsaufgaben verschiedener
Schwierigkeitsgrade, sodass von Anfänger bis
Fortgeschrittenen immer etwas dabei ist und
sich die Programmierkenntnisse effektiv verbessern
lassen. Dabei helfen am Kapitelabschluss insbesondere
detaillierte Musterlösungen inklusive der genutzten
Algorithmen zu allen Aufgaben. Vielfach werden
zudem alternative Lösungswege aufgezeigt, aber
auch mögliche Fallstricke und typische Fehler
thematisiert.
Abgerundet wird das Buch durch zwei Anhänge.
Einer gibt einen Überblick in wesentliche Neuerungen
von Java 8. Der zweite beschäftigt sich mit der
JShell, die zum Ausprobieren der Codeschnipsel
und Beispiele des Buchs oftmals hilfreich ist.
Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler. Nach seinem Studium in Oldenburg hat er bei diversen internationalen Firmen in verschiedenen Rollen etwa als Softwareentwickler und -architekt, als Consultant, Teamleiter, CTO und Leiter Academy sowie Trainer gearbeitet. Zurzeit ist er freiberuflich in Zürich tätig. Michael Inden hat über zwanzig Jahre Berufserfahrung beim Entwurf komplexer Softwaresysteme gesammelt, an diversen Fortbildungen und mehreren Java-One-Konferenzen teilgenommen. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen GUIs sowie dem Coaching. Sein Wissen gibt er gerne als Trainer in internen und externen Schulungen und auf Konferenzen weiter, etwa bei der Java User Group Switzerland, bei der JAX/W-JAX, ch.open und den IT-Tagen.
Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler. Nach seinem Studium in Oldenburg hat er bei diversen internationalen Firmen in verschiedenen Rollen etwa als Softwareentwickler und -architekt, als Consultant, Teamleiter, CTO und Leiter Academy sowie Trainer gearbeitet. Zurzeit ist er freiberuflich in Zürich tätig. Michael Inden hat über zwanzig Jahre Berufserfahrung beim Entwurf komplexer Softwaresysteme gesammelt, an diversen Fortbildungen und mehreren Java-One-Konferenzen teilgenommen. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen GUIs sowie dem Coaching. Sein Wissen gibt er gerne als Trainer in internen und externen Schulungen und auf Konferenzen weiter, etwa bei der Java User Group Switzerland, bei der JAX/W-JAX, ch.open und den IT-Tagen.
1Einleitung
Herzlich willkommen zu diesem Übungsbuch! Bevor Sie loslegen, möchte ich kurz darstellen, was Sie bei der Lektüre erwartet.
Dieses Buch behandelt verschiedene praxisrelevante Themengebiete und deckt diese durch Übungsaufgaben unterschiedlicher Schwierigkeitsstufen ab. Die Übungsaufgaben sind (größtenteils) voneinander unabhängig und können je nach Lust und Laune oder Interesse in beliebiger Reihenfolge gelöst werden.
Neben den Aufgaben finden sich die jeweiligen Lösungen inklusive einer kurzen Beschreibung des zur Lösung verwendeten Algorithmus sowie dem eigentlichen, an wesentlichen Stellen kommentierten Sourcecode.
1.1Aufbau der Kapitel
Jedes Kapitel ist strukturell gleich aufgebaut, sodass Sie sich schnell zurechtfinden werden.
Einführung
Ein Kapitel beginnt jeweils mit einer Einführung in die jeweilige Thematik, um auch diejenigen Leser abzuholen, die mit dem Themengebiet vielleicht noch nicht so vertraut sind, oder aber, um Sie auf die nachfolgenden Aufgaben entsprechend einzustimmen.
Aufgaben
Danach schließt sich ein Block mit Übungsaufgaben und folgender Struktur an:
AufgabenstellungJede einzelne Übungsaufgabe besitzt zunächst eine Aufgabenstellung. Dort werden in wenigen Sätzen die zu realisierenden Funktionalitäten beschrieben. Oftmals wird auch schon eine mögliche Methodensignatur als Anhaltspunkt zur Lösung angegeben.
BeispieleErgänzend finden sich fast immer Beispiele zur Verdeutlichung mit Eingaben und erwarteten Ergebnissen. Nur für einige recht einfache Aufgaben, die vor allem zum Kennenlernen eines APIs dienen, wird mitunter auf Beispiele verzichtet.
Oftmals werden in einer Tabelle verschiedene Wertebelegungen von Eingabeparameter(n) sowie das erwartete Ergebnis dargestellt, etwa wie folgt:
Eingabe A | Eingabe B | Ergebnis |
[1, 2, 4, 7, 8] | [2, 3, 7, 9] | [2, 7] |
Für die Angaben gelten folgende Notationsformen:
- "AB" – steht für textuelle Angaben
- true / false – repräsentieren boolesche Werte
- 123 – Zahlenangaben
- [ value1, value2, …. ] – steht für Collections wie Sets oder Listen, aber auch Arrays
- { key1 : value1, key2 : value3, … } – beschreibt Maps
Lösungen
Auch der Teil der Lösungen besitzt die nachfolgend beschriebene Struktur.
Aufgabenstellung und BeispieleZunächst finden wir nochmals die Aufgabenstellung, sodass wir nicht ständig zwischen Aufgaben und Lösungen hin- und herblättern müssen, sondern das Ganze in sich abgeschlossen ist.
AlgorithmusDanach folgt eine Beschreibung des gewählten Algorithmus zur Lösung. Aus Gründen der Didaktik zeige ich bewusst auch einmal einen Irrweg oder eine nicht so optimale Lösung, um daran dann Fallstricke aufzudecken und iterativ zu einer Verbesserung zu kommen. Tatsächlich ist die eine oder andere Brute-Force-Lösung manchmal sogar schon brauchbar, bietet aber Optimierungspotenziale. Exemplarisch werde ich immer wieder entsprechende, mitunter verblüffend einfache, aber oft auch sehr wirksame Verbesserungen vorstellen.
PrüfungTeilweise sind die Aufgaben recht leicht oder dienen nur dem Kennenlernen von Syntax oder API-Funktionalität. Dafür scheint es mir oftmals ausreichend, ein paar Aufrufe direkt in der JShell auszuführen. Deshalb verzichte ich hierfür auf Unit Tests. Gleiches gilt auch, wenn wir bevorzugt eine grafische Aufbereitung einer Lösung, etwa die Darstellung eines Sudoku-Spielfelds zur Kontrolle nutzen und der korrespondierende Unit Test vermutlich schwieriger verständlich wäre.
Je komplizierter allerdings die Algorithmen werden, desto mehr lauern auch Fehlerquellen, wie falsche Indexwerte, eine versehentliche oder unterbliebene Negation oder ein übersehener Randfall. Deswegen bietet es sich an, Funktionalitäten mithilfe von Unit Tests zu überprüfen – in diesem Buch kann das aus Platzgründen natürlich nur exemplarisch für wichtige Eingaben geschehen. Insgesamt existieren jedoch über 90 Unit Tests mit rund 750 Testfällen. Ein ziemlich guter Anfang. Trotzdem sollte in der Praxis das Netz an Unit Tests und Testfällen wenn möglich noch umfangreicher sein.
1.2Grundgerüst des Eclipse-Projekts
Auch das mitgelieferte Eclipse-Projekt orientiert sich in seinem Aufbau an demjenigen des Buchs und bietet für die Kapitel mit Übungsaufgaben jeweils ein eigenes Package pro Kapitel, z. B. ch02_math oder ch08_recursion_advanced. Dabei weiche ich ausnahmsweise von der Namenskonvention für Packages ab, weil ich die Unterstriche in diesem Fall für eine lesbare Notation halte.
Einige der Sourcecode-Schnipsel aus den jeweiligen Einführungen finden sich in einem Subpackage intro. Die bereitgestellten (Muster-)Lösungen werden in jeweils eigenen Subpackages namens solutions gesammelt und die Klassen sind gemäß Aufgabenstellung wie folgt benannt: Ex<Nr>_<Aufgabenstellung>.
Das gesamte Projekt folgt dem Maven-Standardverzeichnisaufbau und somit finden siche die Sourcen unter src/main/java und die Tests unter src/test/java.
Sourcen – src/main/javaNachfolgend ist ein Ausschnitt für das Kapitel 2 gezeigt:
Test-Klassen – src/test/javaExemplarisch hier einige dazugehörige Tests:
Utility-KlassenAlle in den jeweiligen Kapiteln entwickelten nützlichen Utility-Methoden sind im bereitgestellten Eclipse-Projekt in Form von Utility-Klassen enthalten. Beispielsweise implementieren wir in Kapitel 5 einige hilfreiche Methoden, unter anderem swap() und find() (alle in Abschnitt 5.1.1). Diese kombinieren wir dann in einer Klasse ArrayUtils, die in einem eigenen Subpackage util liegt – für das Kapitel zu Arrays im Subpackage ch05_arrays.util. Gleiches gilt für die anderen Kapitel und Themengebiete.
1.3Grundgerüst für die Unit Tests
Um den Rahmen des Buchs nicht zu sprengen, zeigen die abgebildeten Unit Tests jeweils nur die Testmethoden, jedoch nicht die Testklasse und die Imports. Damit Sie ein Grundgerüst haben, in das Sie die Testmethoden einfügen können sowie als Ausgangspunkt für eigene Experimente, ist nachfolgend eine typische Testklasse gezeigt:
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.time.LocalDate;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.CsvSource;
import org.junit.jupiter.params.provider.ValueSource;
import org.junit.jupiter.params.provider.MethodSource;
public class SomeUnitTests
{
@ParameterizedTest(name = "value at pos {index} ==> {0} should be perfect")
@ValueSource(ints = { 6, 28, 496, 8128 } )
void testIsPerfectNumberSimple(int value)
{
assertTrue(Ex03_PerfectNumbers.isPerfectNumberSimple(value));
}
@ParameterizedTest
@CsvSource({"2017-01-01, 2018-01-01, 53", "2019-01-01, 2019-02-07, 5"})
void testAllSundaysBetween(LocalDate start, LocalDate end, int expected)
{
var result = Ex09_CountSundaysExample.allSundaysBetween(start, end);
assertEquals(expected, result.count());
}
@ParameterizedTest(name = "calcPrimes({0}) =...
Erscheint lt. Verlag | 1.9.2020 |
---|---|
Reihe/Serie | Programmieren mit dpunkt |
Programmieren mit Java | Programmieren mit Java |
Verlagsort | Heidelberg |
Sprache | deutsch |
Themenwelt | Informatik ► Programmiersprachen / -werkzeuge ► Java |
Schlagworte | Bad Smells • codereviews • Coding-Conventions • collections • Entwurfsmuster • Java 10 • Java 11 • Java 12 • java 9 • Java SE • JDK 9 • Jigsaw • lambdas • Modularisierung • Multithreading • Objektorientiertes Design • Programmierstil • Refactorings • Training • Unit Tests |
ISBN-10 | 3-96910-029-1 / 3969100291 |
ISBN-13 | 978-3-96910-029-5 / 9783969100295 |
Informationen gemäß Produktsicherheitsverordnung (GPSR) | |
Haben Sie eine Frage zum Produkt? |
Größe: 4,6 MB
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: EPUB (Electronic Publication)
EPUB ist ein offener Standard für eBooks und eignet sich besonders zur Darstellung von Belletristik und Sachbüchern. Der Fließtext wird dynamisch an die Display- und Schriftgröße angepasst. Auch für mobile Lesegeräte ist EPUB daher gut geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür die kostenlose Software Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür eine kostenlose App.
Geräteliste und zusätzliche Hinweise
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich