Học lập trình Java cơ bản cho người mới bắt đầu phần 1
Published: 2023-08-01 08:11:49

Chào mừng bạn đến với hướng dẫn học lập trình Java cơ bản!
Với mong muốn mang lại những kiến thức học tập cho các bạn học sinh, sinh viên của Việt Nam một cách tiếp cận dễ dàng và tổng quan nhất, mình viết bài này với hi vọng nội dung kiến thức sẽ hữu ích và được áp dụng.

Để bắt đầu thì chúng ta sẽ đi đến các mục sẽ đọc trong bài hôm nay:

- Cài đặt môi trường lập trình 
- Ví dụ đầu tiên 
- Khái niệm lập trình hướng đối tượng (OOP)
- Các kiểu dữ liệu, cấu trúc điều kiện, cấu trúc lặp
- Lập trình đa luồng
- Làm việc với dữ liệu vào ra
- Lập trình phân tán, thực hiện tính toán từ xa

## Bước 1: Cài đặt môi trường Java
Trước tiên, bạn cần cài đặt Java Development Kit (JDK) trên máy tính của mình. Bạn có thể tải JDK từ trang web chính thức của Oracle hoặc OpenJDK. Việc cài đặt này sẽ tuỳ thuộc vào máy tính các bạn sử dụng hệ điều hành gì MacOS, Windows, Lunux(Ubuntu...) thì sẽ có cách hướng dẫn cài khác nhau.
Sau khi cài đặt, hãy kiểm tra phiên bản Java bằng cách mở cửa sổ dòng lệnh và gõ:
`java -version`

> Chúng ta cũng có thể sử dụng một số nền tảng online và thực thi lập trình trên nền web https://www.tutorialspoint.com/codingground.htm

## Bước 2: Hello World!

```java
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }
}

```
Dòng đầu tiên (public class HelloWorld) định nghĩa một lớp có tên **HelloWorld**.
Dòng thứ hai **(public static void main(String[] args))** là phương thức main - phương thức này là điểm khởi đầu khi chạy một chương trình Java.
Dòng thứ ba **(System.out.println("Hello, World!");)** in ra dòng chữ **Hello, World!** lên màn hình.

> Bạn có thể thử ngay đây https://www.tutorialspoint.com/online_java_compiler.php 

## Bước 3: Lập trình hướng đối tượng (OOP)
**Khái niệm cơ bản của Lập trình hướng đối tượng (OOP) và ví dụ mẫu:**

Lập trình hướng đối tượng là một phương pháp lập trình mà trong đó chúng ta xem một chương trình như một tập hợp các đối tượng tương tác với nhau. Mỗi đối tượng có trạng thái (thuộc tính) và hành vi (phương thức). Dưới đây là bốn khái niệm cơ bản của OOP:

**1. Lớp (Class):**

Lớp là một mô tả mẫu (blueprint) cho một nhóm các đối tượng có các thuộc tính và phương thức chung. Nó là một bản thiết kế để tạo ra các đối tượng.

**Ví dụ:**

```java
public class Car {
    String brand;
    String model;

    public void start() {
        System.out.println("The " + brand + " " + model + " is starting.");
    }

    public void accelerate() {
        System.out.println("The " + brand + " " + model + " is accelerating.");
    }
}
```

Trong ví dụ trên, lớp "Car" đại diện cho các đối tượng ô tô, có hai thuộc tính là "brand" và "model" (kiểu dữ liệu là String) và hai phương thức là "start()" và "accelerate()".

**2. Đối tượng (Object):**

Đối tượng là một thể hiện (instance) cụ thể của một lớp. Nó là phiên bản thực tế của lớp, có thể tham gia vào các hoạt động và có trạng thái riêng của nó.

**Ví dụ:**

```java
public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.brand = "Toyota";
        myCar.model = "Camry";

        myCar.start();
        myCar.accelerate();
    }
}
```

Trong ví dụ trên, chúng ta đã tạo một đối tượng "myCar" từ lớp "Car". Chúng ta đã đặt giá trị cho thuộc tính "brand" và "model" của đối tượng "myCar" và gọi hai phương thức "start()" và "accelerate()" của nó.

**3. Trạng thái (State):**

Trạng thái của một đối tượng được xác định bởi các giá trị của các thuộc tính của nó tại một thời điểm cụ thể. Trạng thái của đối tượng có thể thay đổi khi các phương thức của nó được gọi và thay đổi giá trị của các thuộc tính.

**Ví dụ:**

```java
public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.brand = "Toyota";
        myCar.model = "Camry";

        System.out.println("My car is a " + myCar.brand + " " + myCar.model + ".");
    }
}
```

Trong ví dụ trên, chúng ta in ra trạng thái của đối tượng "myCar" bằng cách truy cập và in ra giá trị của thuộc tính "brand" và "model".

**4. Hành vi (Behavior):**

Hành vi của một đối tượng là các phương thức mà nó có thể thực hiện. Nó mô tả các hoạt động và tương tác mà đối tượng có thể thực hiện với các đối tượng khác.

**Ví dụ:**

```java
public class Main {
    public static void main(String[] args) {
        Car myCar = new Car();
        myCar.brand = "Toyota";
        myCar.model = "Camry";

        myCar.start();
        myCar.accelerate();
    }
}
```

Trong ví dụ trên, hành vi của đối tượng "myCar" là hai phương thức "start()" và "accelerate()", khi chúng ta gọi các phương thức này, nó sẽ thực hiện các hành động tương ứng của một chiếc xe hơi, như khởi động và tăng tốc.

Các khái niệm cơ bản của OOP này giúp bạn xây dựng và tổ chức mã của mình một cách cấu trúc hơn, giúp bạn dễ dàng mở rộng và duy trì các chương trình lớn và phức tạp hơn.

> Như vậy từ đây chúng ta phân biệt được file có đuôi .java chỉ là file để mô tả đối tượng, định nghĩa ra đối tượng, còn khi thực thi chúng ta cần biên dịch file.java thành file.class và máy ảo Java sẽ tạo các đối tượng (object) được trong bộ nhớ của mình để bắt đầu thực hiện chương trình.

Có bốn tính chất cơ bản của Lập trình hướng đối tượng (OOP), được gọi là "tính chất PILL" (PILL acronym), đó là:

**1. Tính chất Kế thừa (Inheritance):**

Kế thừa cho phép một lớp (lớp con) kế thừa các thuộc tính và phương thức từ một lớp khác (lớp cha). Lớp con kế thừa các tính chất của lớp cha và có thể mở rộng và/hoặc ghi đè các phương thức của lớp cha.

**Ví dụ:**

```java
public class Animal {
    void sound() {
        System.out.println("Some generic sound");
    }
}

public class Dog extends Animal {
    void sound() {
        System.out.println("Woof!");
    }
}

public class Cat extends Animal {
    void sound() {
        System.out.println("Meow!");
    }
}
```

Trong ví dụ trên, lớp "Dog" và "Cat" kế thừa từ lớp "Animal" và ghi đè phương thức "sound()" của lớp cha để tạo ra tiếng kêu riêng cho mỗi loài.

**2. Tính chất Đa hình (Polymorphism):**

Đa hình cho phép một lớp con thể hiện các hình dạng khác nhau của một lớp cha bằng cách sử dụng kế thừa và ghi đè phương thức. Điều này cho phép chúng ta thực hiện các phương thức giống nhau với các lớp con khác nhau một cách thích hợp.

**Ví dụ:**

```java
public class Shape {
    void draw() {
        System.out.println("Drawing a shape");
    }
}

public class Circle extends Shape {
    void draw() {
        System.out.println("Drawing a circle");
    }
}

public class Rectangle extends Shape {
    void draw() {
        System.out.println("Drawing a rectangle");
    }
}
```

Trong ví dụ trên, các lớp con "Circle" và "Rectangle" đều thể hiện tính chất đa hình khi ghi đè phương thức "draw()" của lớp cha "Shape" để vẽ hình dạng khác nhau.

**3. Tính chất Đóng gói(Encapsulation):**

Đóng gói (Encapsulation) là việc bao gồm các trạng thái và hành vi của một đối tượng vào trong cùng một đơn vị gọi là lớp. Tính đóng gói giúp che giấu các chi tiết củ thể bên trong lớp, chỉ cho phép truy cập và thay đổi thông tin của đối tượng thông qua các phương thức được định nghĩa công khai.

**Ví dụ:**

```java
public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}
```

Trong ví dụ trên, các thuộc tính "name" và "age" được định nghĩa là private, chỉ cho phép truy cập thông qua các phương thức công khai "getName()" và "setName()", "getAge()" và "setAge()".

**4. Tính chất Tính trừu tượng (Abstraction):**

Tính trừu tượng là việc che giấu các chi tiết tri thức không cần thiết và tập trung vào việc hiển thị thông tin quan trọng trong một đối tượng. Nó cho phép tạo ra các lớp trừu tượng chỉ định các hành vi chung, trong khi để lớp con cụ thể thực hiện các chi tiết cụ thể.

**Ví dụ:**

```java
abstract class Shape {
    abstract void draw();
}

class Circle extends Shape {
    void draw() {
        System.out.println("Drawing a circle");
    }
}

class Rectangle extends Shape {
    void draw() {
        System.out.println("Drawing a rectangle");
    }
}
```

Trong ví dụ trên, lớp "Shape" là một lớp trừu tượng, không định nghĩa cụ thể các phương thức, chỉ định các hành vi chung (khai báo phương thức "draw()"). Các lớp con "Circle" và "Rectangle" phải triển khai lại phương thức "draw()" để thực hiện chi tiết riêng của mỗi hình dạng.

Các tính chất PILL (Kế thừa, Đa hình, Đóng gói và Tính trừu tượng) giúp OOP trở nên mạnh mẽ và dễ dàng quản lý và phát triển các ứng dụng phức tạp hơn bằng cách tổ chức mã và tái sử dụng mã một cách hiệu quả.
> Như vậy qua phần này các bạn hiểu rõ hơn về những khái niệm, tính chất của lập trình hướng đối tượng. Mọi file code.java được thiết kế ra để sử dụng thì là mô tả 1 class nào đó và khi tạo mới thì nó tạo được object, trong object được tạo nó sẽ có thuộc tính(property) và phương thức (method). Thuộc tính sẽ mang giá trị để chứa thông tin dữ liệu, phương thức là 1 hàm tính toán để thực hiện một hành động tính toán hoặc công việc cụ thể nào đó.

> Các bạn tiếp tục học lập trình với bài tiếp theo
[Học lập trình Java cơ bản cho người mới bắt đầu phần 2](https://dev.to/phamtuanchip/hoc-lap-trinh-java-co-ban-cho-nguoi-moi-bat-dau-phan-2-4fio)