Oracle Certified Professional Java SE 8 Programmer
1 Java Class Design
1-1 Implement encapsulation
1-2 Implement inheritance including visibility modifiers and composition
1-3 Implement polymorphism
1-4 Override hashCode, equals, and toString methods from Object class
1-5 Create and use singleton classes and immutable classes
1-6 Develop code that uses static keyword on initializers, variables, methods, and classes
2 Advanced Java Class Design
2-1 Develop code that uses abstract classes and methods
2-2 Develop code that uses the final keyword
2-3 Create inner classes including static inner class, local class, nested class, and anonymous inner class
2-4 Use enumerated types including methods, and constructors in an enum type
2-5 Develop code that declares, implements andor extends interfaces and use the atOverride annotation
2-6 Create and use Lambda expressions
3 Generics and Collections
3-1 Create and use a generic class
3-2 Create and use ArrayList, TreeSet, TreeMap, and ArrayDeque objects
3-3 Use java util Comparator and java lang Comparable interfaces
3-4 Collections Streams and Filters
3-5 Iterate using forEach methods of Streams and List
3-6 Describe Stream interface and Stream pipeline
3-7 Use method references with Streams
4 Lambda Built-in Functional Interfaces
4-1 Use the built-in interfaces included in the java util function package such as Predicate, Consumer, Function, and Supplier
4-2 Develop code that uses primitive versions of functional interfaces
4-3 Develop code that uses binary versions of functional interfaces
4-4 Develop code that uses the UnaryOperator interface
5 Java Stream API
5-1 Develop code to extract data from an object using map, peek, and flatMap methods
5-2 Search for data by using search methods of the Stream classes including findFirst, findAny, anyMatch, allMatch, noneMatch
5-3 Develop code that uses the Optional class
5-4 Develop code that uses Stream data methods and calculation methods
5-5 Sort a collection using Stream API
5-6 Save results to a collection using the collect method and grouppartition data using the Collectors class
5-7 Use flatMap() methods in the Stream API
6 Exceptions and Assertions
6-1 Use try-catch and throw statements
6-2 Use catch, multi-catch, and finally clauses
6-3 Use Autoclose resources with a try-with-resources statement
6-4 Create custom exceptions and Auto-closeable resources
6-5 Test invariants by using assertions
7 Use Java SE 8 DateTime API
7-1 Create and manage date-based and time-based events including a combination of date and time into a single object using LocalDate, LocalTime, LocalDateTime, Instant, Period, and Duration
7-2 Work with dates and times across time zones and manage changes resulting from daylight savings including Format date and times values
7-3 Define and create and manage date-based and time-based events using Instant, Period, Duration, and TemporalUnit
8 Java File IO (NIO 2)
8-1 Operate on file and directory paths using the Paths class
8-2 Check, delete, copy, and move files and directories using the Files class
8-3 Recursively access a directory tree using the DirectoryStream and FileVisitor interfaces
8-4 Find a file by using the PathMatcher interface, and use Java SE 8 IO improvements, including Files find(), Files walk(), and lines() methods
8-5 Observe the changes in a directory by using WatchService
9 Java Concurrency
9-1 Create worker threads using Runnable, Callable and use an ExecutorService to concurrently execute tasks
9-2 Identify potential threading problems among deadlock, starvation, livelock, and race conditions
9-3 Use synchronized keyword and java util concurrent atomic package to control the order of thread execution
9-4 Use java util concurrent collections and classes including CyclicBarrier and CopyOnWriteArrayList
9-5 Use parallel ForkJoin Framework
9-6 Use parallel Streams including reduction, decomposition, merging processes, pipelines, and performance
10 Building Database Applications with JDBC
10-1 Describe the interfaces that make up the core of the JDBC API including the Driver, Connection, Statement, and ResultSet interfaces and their relationship to provider implementations
10-2 Identify the components required to connect to a database using the DriverManager class including the JDBC URL
10-3 Submit queries and read results from the database including creating statements, returning result sets, iterating through the results, and properly closing result sets, statements, and connections
10-4 Use PreparedStatement to perform CRUD operations
10-5 Use CallableStatement to call stored procedures
10-6 Use Transactions including disabling auto-commit mode, committing and rolling back transactions
10-7 Use JDBC batch operations
10-8 Create and use RowSet objects using RowSetProvider and RowSetFactory
11 Localization
11-1 Read and set the locale by using the Locale object
11-2 Create and manage date- and time-based events by using Localization including formatting dates, numbers, and currency values
11-3 Work with dates, numbers, and currency values by using the NumberFormat and DateFormat classes and their derived classes such as DecimalFormat and SimpleDateFormat
11-4 Build a user interface for a localized application
11-5 Describe the advantages of localizing an application
Java Class Design

Java Class Design

Java Class Design is a fundamental aspect of object-oriented programming (OOP) that involves structuring classes to model real-world entities and behaviors. Understanding how to design classes effectively is crucial for creating maintainable, scalable, and reusable code. This webpage will delve into key concepts related to Java Class Design, providing detailed explanations and examples to enhance your understanding.

1. Encapsulation

Encapsulation is the practice of bundling data (attributes) and methods (behaviors) that operate on the data into a single unit, known as a class. It also involves restricting direct access to some of the object's components, which helps in controlling the state of the object and preventing unintended interference.

Example:

public class Car {
    private String model;
    private int year;

    public Car(String model, int year) {
        this.model = model;
        this.year = year;
    }

    public String getModel() {
        return model;
    }

    public int getYear() {
        return year;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public void setYear(int year) {
        this.year = year;
    }
}
    

In this example, the Car class encapsulates the model and year attributes, providing public methods to access and modify them. This ensures that the internal state of the Car object is controlled and protected.

2. Inheritance

Inheritance allows a class to inherit properties and behaviors from another class, known as the superclass or parent class. This promotes code reuse and the creation of a hierarchical relationship between classes. The class that inherits is called the subclass or child class.

Example:

public class Vehicle {
    protected String type;

    public Vehicle(String type) {
        this.type = type;
    }

    public void start() {
        System.out.println("Vehicle started");
    }
}

public class Car extends Vehicle {
    public Car() {
        super("Car");
    }

    @Override
    public void start() {
        System.out.println("Car started");
    }
}
    

Here, the Car class inherits from the Vehicle class, inheriting the type attribute and the start method. The Car class can override the start method to provide its own implementation.

3. Polymorphism

Polymorphism allows objects of different classes to be treated as objects of a common superclass. It enables methods to be written that can work with objects of multiple types, providing flexibility and extensibility in code design.

Example:

public class Main {
    public static void main(String[] args) {
        Vehicle vehicle = new Car();
        vehicle.start(); // Output: Car started
    }
}
    

In this example, a Car object is assigned to a Vehicle reference. When the start method is called, the overridden method in the Car class is executed, demonstrating polymorphism.

4. Abstraction

Abstraction involves hiding the complex reality while exposing only the essential features. In Java, this can be achieved using abstract classes and interfaces. Abstract classes cannot be instantiated and are meant to be extended, while interfaces define a contract that implementing classes must adhere to.

Example:

public abstract class Shape {
    protected String color;

    public Shape(String color) {
        this.color = color;
    }

    public abstract double getArea();
}

public class Circle extends Shape {
    private double radius;

    public Circle(String color, double radius) {
        super(color);
        this.radius = radius;
    }

    @Override
    public double getArea() {
        return Math.PI * radius * radius;
    }
}
    

In this example, the Shape class is abstract, defining an abstract method getArea. The Circle class extends Shape and provides an implementation for getArea, demonstrating abstraction.

5. Composition

Composition is a design principle where a class is composed of one or more objects of other classes, rather than inheriting from them. This allows for more flexible and modular code, as the composed objects can be easily replaced or modified without affecting the main class.

Example:

public class Engine {
    public void start() {
        System.out.println("Engine started");
    }
}

public class Car {
    private Engine engine;

    public Car() {
        this.engine = new Engine();
    }

    public void startCar() {
        engine.start();
        System.out.println("Car started");
    }
}
    

In this example, the Car class is composed of an Engine object. The Car class uses the Engine object to perform its functionality, demonstrating composition.

By mastering these concepts, you will be well-equipped to design robust and efficient Java classes, aligning with the principles of OOP and preparing you for the Oracle Certified Professional Java SE 8 Programmer certification.