How to Create Class Diagrams with PlantUML for Clear Object-Oriented Design

PlantUML is a powerful tool to create class diagrams that help in visualizing and designing object-oriented software. Below is a comprehensive guide to creating class diagrams with PlantUML for clear object-oriented design.

1. What is PlantUML?

PlantUML is a text-based tool for creating UML (Unified Modeling Language) diagrams. It uses simple plain-text descriptions to generate visual representations of UML diagrams (including class diagrams, sequence diagrams, etc.).

2. Setting Up PlantUML

Option 1: Standalone

  1. Install Java. PlantUML requires Java (minimum version 1.8).
  2. Download the PlantUML JAR file from PlantUML’s official website.
  3. Use a text editor to write PlantUML code.
  4. Generate diagrams by running:
    java -jar plantuml.jar your-diagram-file.puml
    

Option 2: IntelliJ IDEA Integration

  1. Install the PlantUML Integration plugin in IntelliJ IDEA:
    • Go to File > Settings > Plugins.
    • Search for “PlantUML Integration”.
    • Install the plugin and restart IntelliJ IDEA.
  2. Write .puml files directly in IntelliJ and render diagrams using the integrated PlantUML viewer.

3. Components of a PlantUML Class Diagram

Basic Syntax

PlantUML class diagrams are defined inside @startuml and @enduml tags. Here’s an example:

@startuml
class ClassName {
    + PublicAttribute
    - PrivateAttribute
    # ProtectedAttribute
    + method(): ReturnType
}
@enduml

Key Elements

Symbol Meaning
+ Public
- Private
# Protected
< and > Generics/Parameterized Class
.. or -- Relationships/Dependencies

4. Example of a Class Diagram

Below is an example of modeling an object-oriented system with PlantUML:

@startuml
class Person {
    - id: int
    + name: String
    + email: String
    + getContactInfo(): String
}

class Employee {
    - employeeId: int
    + department: String
    + getRole(): String
}

class Manager {
    + manages: List<Employee>
    + assignTask(task: Task): void
}

Person <|-- Employee
Employee <|-- Manager
@enduml


Key Explanation:

  1. Class Definitions:
    • Each class (e.g., Person, Employee, Manager) is defined with attributes and methods.
  2. Inheritance:
    • The arrow <|-- shows inheritance relationships (e.g., Employee is derived from Person).
  3. Associations:
    • Use arrows (e.g., associations to depict relationships between objects).

5. Advanced Features

Adding Interfaces

@startuml
interface PaymentProcessor {
    + processPayment(amount: Double): Boolean
}

class CreditCardPayment {
    + creditCardNumber: String
    + expiryDate: String
}

PaymentProcessor <|.. CreditCardPayment
@enduml
  • You can define an interface using the interface keyword.
  • Use <|.. to implement interfaces.

Abstract Classes

@startuml
abstract class Shape {
    + draw(): void
}

class Circle {
    + radius: Double
}

class Rectangle {
    + width: Double
    + height: Double
}

Shape <|-- Circle
Shape <|-- Rectangle
@enduml
  • Define abstract classes using the abstract keyword.
  • Use <|-- to show that classes inherit from the abstract class.

Relationships

Type Syntax Example
Inheritance < | --or`<
Composition *--> or *-- House *--> Room
Aggregation o--> or o-- Team o--> Player
Association -- or <..> Library -- Borrower

Generic Classes

@startuml
class Stack<T> {
    + push(item: T): void
    + pop(): T
}
@enduml
  • Generics are supported using angle brackets (<T>).

6. Best Practices for Clear Diagrams

  1. Keep It Simple: Focus on key parts of the design. Avoid overcrowding diagrams with unnecessary details.
  2. Use Annotations: Add comments and notes to improve readability. You can annotate using:
    note "This is a general note" as N1
    
  3. Organize Classes: Use packages or group related classes together:
    package "Model" {
       class User
       class Role
    }
    
  4. Use Relationships Effectively: Clearly specify inheritance, associations, aggregations, and compositions for better understanding.

7. Generate the Diagram

After writing the .puml file, generate the diagram:

By following these steps, you can create clear, well-structured class diagrams to visualize object-oriented designs effectively.

A Comprehensive Guide to Setting Up Apache Maven

In this guide, you’ll learn everything you need to know about Apache Maven—from what it is to how to configure it across different operating systems.


What is Apache Maven?

In simple terms, Maven is a powerful build and project management tool primarily used by Java developers. Compared to older build systems like Apache Ant, Maven provides a standardized way to manage builds, dependencies, and project lifecycles.

Key Features of Maven:

  • Simplifies the build process.
  • Ensures consistency with a uniform build system.
  • Manages project dependencies through a central or local repository.
  • Provides quality project information.
  • Follows development best practices.
  • Allows for smooth migration to new features.

Now, let’s dive into how to install and configure Maven on your system.


Step 1: Downloading Apache Maven

  1. Visit the official Apache Maven Download page.
  2. Download the binary archive matching your operating system:
    • .zip for Windows
    • .tar.gz for Linux/macOS
  3. Extract the archived files to a directory of your choice:
    • On Windows, you might extract to: C:\Apache\apache-maven-<version>
    • On Linux/macOS, extract it to: /opt/apache-maven-<version>

Step 2: Configuring Environment Variables

After downloading Maven, the next step is to configure your environment so that Maven can be accessed from your terminal or command prompt.

On Windows:

  1. Open System Properties:
    • Right-click on “This PC” → select Properties → click Advanced System Settings → select Environment Variables.
  2. Add the following system variables:
    • M2_HOME: Set this to the Maven installation directory (e.g., C:\Apache\apache-maven-<version>).
    • JAVA_HOME: Set this to your JDK installation directory (e.g., C:\Program Files\Java\jdk-<version>).
  3. Add M2_HOME\bin to your PATH variable:
    • Locate and edit the PATH variable in the Environment Variables list.
    • Append: ;%M2_HOME%\bin

On Linux/macOS:

  1. Open your shell profile configuration file. This depends on the shell you’re using:
    • For bash: ~/.bashrc or ~/.bash_profile
    • For zsh (default on macOS): ~/.zshrc
  2. Add the following lines to configure Maven and Java:
    export M2_HOME=/opt/apache-maven-<version>
    export PATH=$M2_HOME/bin:$PATH
    export JAVA_HOME=/path/to/your/jdk
    

    Example:

    export M2_HOME=/opt/apache-maven-3.9.5
    export PATH=$M2_HOME/bin:$PATH
    export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
    
  3. Reload the configuration:
    source ~/.bashrc    # For bash users
    source ~/.zshrc     # For zsh users
    

Step 3: Verifying the Installation

Now that Maven is installed and configured, it’s time to check if it works correctly.

  1. Open a terminal or command prompt.
  2. Run the following command:
    mvn -version
    
  3. You should see output similar to this:
    Apache Maven 3.x.x (...)
    Maven home: <Maven installation path>
    Java version: <your JDK version>, vendor: Oracle Corporation
    Java home: <JDK path>
    

Additional Installation Options

Using a Package Manager (Optional):

If you’re on Linux or macOS, you may install Maven using a package manager. Note that these methods may not always install the latest version.

  1. Linux (Ubuntu/Debian):
    sudo apt update
    sudo apt install maven
    
  2. Linux (CentOS/RHEL):
    sudo yum install maven
    
  3. macOS:
    Install Maven via Homebrew:

    brew install maven
    

Verifying Java:

Maven requires a JDK (Java Development Kit) to work. Verify that Java is installed by running:

java -version

If it’s not installed:

  • On Linux, install OpenJDK:
    sudo apt install openjdk-17-jdk   # For Ubuntu/Debian
    sudo yum install java-17-openjdk  # For CentOS/RHEL
    
  • On macOS, install OpenJDK via Homebrew:
    brew install openjdk
    

Step 4: Running Maven

You’re now ready to use Maven! Here are a few common commands:

  1. Check Maven Version:
    mvn -version
    
  2. Create a New Maven Project:
    mvn archetype:generate
    
  3. Build a Maven Project:
    mvn clean install
    

Final Thoughts

Congratulations! You’ve successfully installed and configured Apache Maven. With Maven set up on your system, you can now manage your Java projects with ease. Maven simplifies build processes, ensures consistent project management, and makes dependency management seamless. Feel free to explore its many features and extend your knowledge by diving into Maven’s powerful tools, plugins, and architecture.

Have fun coding! 🚀

How do I install and manage multiple Java versions with SDKMAN?

SDKMAN (Software Development Kit Manager) is a command-line tool that allows you to manage multiple versions of Java and other SDKs easily. Here’s how you can install and manage multiple Java versions using SDKMAN:


Step 1: Install SDKMAN

  1. Open your terminal.
  2. Run the following command to install SDKMAN:
    curl -s "https://get.sdkman.io" | bash
    
  3. Follow the instructions provided during the installation process, which might ask you to update your shell configuration.

  4. Reload your terminal or execute:

    source "$HOME/.sdkman/bin/sdkman-init.sh"
    
  5. Verify the installation:
    sdk version
    

    If installed correctly, it will display the version of SDKMAN you just installed.


Step 2: List Available Java Versions

To list all available Java versions:

sdk list java

This will display a list of Java distributions and their versions.


Step 3: Install a Specific Java Version

To install a desired Java version, use the following command:

sdk install java <version>

For example, to install OpenJDK 21:

sdk install java 21-open

Once installed, it will set this version as the default one automatically.


Step 4: Use a Specific Version

  1. To see all installed versions, use:
    sdk list java
    
  2. To switch to a specific version:
    sdk use java <version>
    

    For example:

    sdk use java 17-open
    

    This will only apply to your current terminal session.


Step 5: Set a Default Version

To make a specific Java version the default across all terminal sessions:

sdk default java <version>

For instance:

sdk default java 21-open

Step 6: Check Active Java Version

To check the currently active Java version:

java -version

Managing Installed Versions

  1. To see installed versions:
    sdk list java
    
  2. To uninstall an old or unused version:
    sdk uninstall java <version>
    

Additional Tips

  • SDKMAN can also manage other SDKs like Maven, Gradle, and Kotlin.
  • To update SDKMAN itself:
    sdk update
    
  • To update all installed SDKs:
    sdk upgrade
    

By following these steps, you can easily install, switch, and manage multiple Java versions using SDKMAN!

How to copy files ending with a specific string to another file in Linux/macOS?

In Java 17, the Locale for Indonesia changed from in_ID to id_ID. In my project, the resource bundle files are named with the suffix _in.properties which is unrecognized by Java 17. To resolve this issue, I need to create copies of these resource bundle files that ends with _id.properties.

Here are solutions for both Linux/macOS (using Bash).

#!/bin/bash

# Set the root directory for the search
ROOT_DIR="/path/to/root_directory"

# Find all files ending with '_in.properties' and process each one
find "$ROOT_DIR" -type f -name "*_in.properties" | while read -r FILE; do
    # Construct file name by replacing '_in.properties' with '_id.properties'
    NEW_FILE="${FILE%_in.properties}_id.properties"
    # Copy the original file to the new file
    cp "$FILE" "$NEW_FILE"
done

Save this script as copy_properties.sh, make it executable with chmod +x copy_properties.sh, and run it with ./copy_properties.sh.

Explanation

  • find "$ROOT_DIR" -type f -name "*_in.properties": Finds all files ending with _in.properties.
  • while read -r FILE; do ... done: Loops through each found file.
  • ${FILE%_in.properties}_id.properties: Constructs the new file name by replacing _in.properties with _id.properties.
  • cp "$FILE" "$NEW_FILE": Copies the original file to the new file.

These scripts will recursively search the specified directory for files ending with _in.properties, then create a copy of each file with _id.properties in the same directory.

How do I scp between two remote hosts?

To scp between two remote hosts, you typically need to be logged into one of the hosts and execute the scp command there.

The general format is like this:

scp <user>@<source_host>:<source_file_path> <user>@<destination_host>:<destination_file_path>

Suppose, you are logged into host1, and you want to copy a file from host2 to host3.
First, make sure that the key-based ssh authentication is set up for host2 -> host1 and host1 -> host3. Then, on host1, you can execute:

scp user@host2:/path/to/source/file.txt user@host3:/path/to/destination/

This will copy file.txt from host2 to host3.

Keep in mind this command requires you to have proper SSH access and permissions for both source and destination hosts. If you do not have the necessary authentication set up, the command will ask for the password for each machine.

Set up key-based SSH authentication

To set up key-based SSH authentication, you’ll need to generate a key pair on host1, then copy the public key to host2 and host3. Here’s how you can do it:

  1. Step One — Create the RSA Key Pair on host1:

Open a terminal and run the following command:

ssh-keygen -t rsa

You will be asked to specify the file location and passphrase (optional). If you just press Enter through those prompts, it will create an RSA key pair with default settings.

  1. Step Two — Store the Keys and Passphrase:

When you are prompted to “Enter a file in which to save the key,” you can press Enter. This accepts the default file location.

At the prompt, type a secure passphrase or press enter to proceed without a passphrase.
After completing these steps, your new keys are available in your user home folder ~/.ssh/id_rsa for your private key and ~/.ssh/id_rsa.pub for your public key.

  1. Step Three — Copy the Public Key to host2 and host3:

Next, you’ll copy your public key to your host2 and host3 using the ssh-copy-id command. Like this:

ssh-copy-id user@host2
ssh-copy-id user@host3

Replace user with your username, and host2 or host3 with the IP address or hostname of your second and third machines. You will be prompted for the user password for host2 and host3 to copy the public key.

That’s it! You have set up the key-based ssh authentication. Now you can log into host2 and host3 from host1 without a password:

ssh user@host2

or

ssh user@host3

This method applies to any Linux or Unix system that uses SSH. Please refer to the documentation for Windows servers or any other non-Unix systems. Also note that the user must have ssh and shell access.

Warning: Be careful with your private key (~/.ssh/id_rsa). Don’t share your private key with anyone! In production environments, it’s a common practice to protect private keys with a strong passphrase.

Note: The scp command is not installed by default on some systems. You can install it using your system package manager (like apt, yum, etc.). Alternatively, you can use rsync or sftp depending on the systems and permissions involved.

Important: Remember about data security. Always ensure safe and secure data transfer, especially when dealing with sensitive data. Use encrypted channels for such transfers (which scp does by utilizing SSH). Make sure the user whose credentials are used for the transfer has only the necessary permissions and nothing more.

How do I compile and execute a JDK preview features with Maven?

To compile and execute a JDK preview features with Maven, you need to add in the following configurations in your pom.xml file:

  • Compiler Plugin: The configuration should specify the JDK version and enable the preview features. It should look similar to this:
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>21</release>
                <compilerArgs>--enable-preview</compilerArgs>
            </configuration>
        </plugin>
    </plugins>
</build>
  • Surefire Plugin: If you’re using the Maven Surefire Plugin to run your tests, you should also enable the preview features there. The configuration may look similar to this:
<build>
    <plugins>
    ...
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <argLine>--enable-preview</argLine>
            </configuration>
        </plugin>
    </plugins>
</build>

Before building your project, ensure that you have JDK 21-preview installed on your computer, and it’s properly set in JAVA_HOME environment variable or in the IDE settings.

Then use Maven to package or install your project:

mvn clean package
# or
mvn clean install

Please ensure that you have the correct version of maven-compiler-plugin and maven-surefire-plugin that support the JDK 21-preview features. For the project that uses Spring MVC, you should make sure all dependencies are compatible with JDK 21-preview as well.

How do I install Calibri font in Ubuntu?

I need to create a Microsoft Word Mail Merge document in my Java Spring MVC application. But running it in Ubuntu server resulting in a document that missing the default font use in the document, which is the Calibri font. So I need to install the font in Ubuntu to make the document looks as expected.

Here what I need to do to install the font in my Ubuntu box. Starts by updating the repository package list to get latest packages information for upgrades or new package installation.

sudo apt-get update

Then install FontForge in our system. FontForge is a free and open source font editor, but in this case it will help to do the font conversion in the installation script on the upcoming step.

sudo apt-get install fontforge

Install the Microsoft Cabinet file un-packer. This is required for the next script to successfully install the fonts.

sudo apt-get install cabextract

The following script will install Microsoft Vista TrueType Fonts (TTF) in Ubuntu. It includes the following fonts, Calibri, Cambria, Candara, Consolas, Constantia, and Corbel.

wget https://gist.githubusercontent.com/maxwelleite/10774746/raw/ttf-vista-fonts-installer.sh -q -O - | sudo bash

Run the next command to see if the font successfully installed. You will see the Calibri fonts in the result if the fonts successfully installed.

fc-list | grep Calibri

Here are the list of installed Calibri fonts.

/usr/share/fonts/truetype/vista/calibriz.ttf: Calibri:style=Bold Italic
/usr/share/fonts/truetype/vista/calibrii.ttf: Calibri:style=Italic
/usr/share/fonts/truetype/vista/calibrib.ttf: Calibri:style=Bold
/usr/share/fonts/truetype/vista/calibri.ttf: Calibri:style=Regular

How to Install Consolas Font in Mac OS X?

Here are the instructions to install Microsoft Consolas Font on Mac OS X.

  • You need to install brew first.
  • Type-in the following commands.
brew install cabextract
cd ~/Downloads
mkdir Consolas
cd Consolas
curl -LO https://sourceforge.net/projects/mscorefonts2/files/cabs/PowerPointViewer.exe
cabextract PowerPointViewer.exe
cabextract ppviewer.cab
open CONSOLA*.TTF
  • Press Install Font button to install the fonts.

How do I clear the current command line in terminal?

Terminal

You have typed a long line of command in terminal. But now you want to clear or delete the entire line. Deleting each character in the command will take sometime and bored you. So are there any keyboard shortcuts that allow you to do this? Yes there are some hotkeys to the rescue.

Hotkeys Description
CTRL + u Delete the current command.
The deleted command will be stored into a buffer.
CTRL + w Delete a word.
CTRL + c Abort what you are typing.
CTRL + d Delete current character.

Other hotkeys that might help you work faster in the terminal.

Hotkeys Description
CTRL + e Move to the end of line.
CTRL + a Move to the start of line.
CTRL + k Cut text from the cursor to the end of line.
CTRL + y Paste the last cut text or buffer.
CTRL + - Undo.
CTRL + b Backward one character.
CTRL + f Forward one character.
ALT + Backward one word.
ALT + Forward one word.

Step-By-Step Guide to Creating and Inserting a Java API in Eclipse

Eclipse is the most popular Java Integrated Development Environment (IDE). Just check out the survey result.

**Image Source: **IProgrammer

Here is one more for you.

Image Source Qiita

Some people say that Eclipse is dying. However, we can see that many developers still prefer using Eclipse. Let’s get Eclipse popularity part out of the way and talk about how you can insert a Java API in Eclipse. You can do it quickly. But before getting to adding and creating API, I will educate about Java API for readers who do not have in-depth knowledge of Java API.

What is Java API?

The full form of API is Application Programming Interface (API). Java language comprises various syntax and semantics. The set of classes that are inside the Java Development Environment is known as Java API.

The classes in Java API is in Java language, and it runs via a Java Virtual Machine. You can find every single thing inside Java API, ranging from collection classes to GUI classes.

To get the most out of Java API, you need to have a firm grasp of Java programming language. Java is the most popular language in the world today, and huge corporations love Java due to its great documentation and security features.

If you want to land a project in Java, it is beneficial to undertake a Java Certification Training course that gives clear insights about various aspect of the language being a big plus for novice as well as tech professionals.

There are various levels in Java certification courses. You can slowly jump from one level to the another and learn as you go. You can write some codes on the side while going through the Java certification courses.

How to Create and Insert a Java API in Eclipse?

Now that you are aware of Java API, we can talk about the process of creating and inserting a Java API in Eclipse.

To create a great program without wasting much time, you need to work in a framework. If you are among the developers who are looking to develop your API via Eclipse, you are in the right place. I will show you a step-by-step guide to creating and inserting a Java API in Eclipse. All you need to do is systematically follow my instruction.

Project Creation

The first task is a project creation. Here are the steps:

  • Enter the current workspace inside Eclipse. It is better to create a new workspace to ensure that you do not mess your projects.
  • After the first step, you need to make a new Java Project and give whatever name you like. However, you should make sure that your name relates to your project.
  • After the project creation, you need to test if you can see your project in an explorer window or not. It is essential to make sure that it does not mess around with other projects.

Fresh Package and Class

  • Head to project explorer and right click your project. After selecting a new package, name it. It will act as the main class file.
  • Head to package, click new, and then select class under the source folder. Give a relevant name to the class. Make the class, public and do not make the main method stub in class.
  • After the completion of the first two steps, double-click your class file.

Time to Add Code and Export

  • You can now add some codes to your project. For now, create some random static methods that return something.
  • When you finish adding methods to your class, export it as a jar file. It is a simple process. Go to the project source folder and select Export. Then click on Java and select JAR file. Note down the export location, so that you will be able to access it later. You can then click on the Finish button and let the Eclipse do the rest for you.

Do the Testing

  • You are now all set to do some testing. Just create a project like in step number 1. Name it different this time around.
  • There is no need to export it because it is a test project. Instead of exporting, go with creating a package. Just create a new class and name it “test.” You can now inherit the public static void main method. Select the finish button after completing the process.
  • You will observe a class file with the primary method when you smash the finish button. In case you fail to see the class file, copy the code below.

Create a JAR for Building a Path

You are in the ending part of creating and inserting a Java API. You have a primary method ready. Now, you should add API to a build path of the new project.

  • Select your new project and then go to properties.
  • Select “Java Build Path” on the properties–>window.
  • Select Libraries after entering the “Java Build Path” in the properties menu.
  • Click on “Add External JARs..” and go to your API location and then select open.
  • Click the open button to finish the step number 5.

Time to Run your API

You are finally ready for a climax. You have now created your API. What to do next? Just implement your API and observe your computer screen. If there are errors, go through the article once again to see if you missed something along the way.

Over To You

Did you find it challenging to create and insert Java API to Eclipse? Hopefully not. It is so easy that you can finish the task of creating and adding Java API to Eclipse within 10-30 minutes. After the installation of Java API, you can complete your projects in a shorter period.

Remember, smart programmers not only work hard, but they work smart as well. Creating and inserting Java API to Eclipse is the first step to working smart. I hope you have found value in this article. If you have any confusions, feel free to comment below. I will be more than happy to assist you in your path to getting things done.