Showing posts with label Java. Show all posts
Showing posts with label Java. Show all posts

Top 10 ngôn ngữ lập trình phổ biến nhất năm 2024

Thế giới công nghệ đang thay đổi với tốc độ chóng mặt, kéo theo đó là sự phát triển không ngừng của các ngôn ngữ lập trình. Vậy đâu là những ngôn ngữ lập trình phổ biến nhất trong năm 2024 mà các lập trình viên nên biết? Hãy cùng khám phá danh sách top 10 dưới đây!


1. JavaScript



Vẫn giữ vững ngôi vương, JavaScript tiếp tục là ngôn ngữ lập trình phổ biến nhất hiện nay. Với khả năng ứng dụng rộng rãi trong phát triển web front-end và back-end, JavaScript là lựa chọn hàng đầu cho các nhà phát triển web. Các framework phổ biến như React, Angular và Vue.js càng củng cố vị thế vững chắc của JavaScript.

2. Python



Python tiếp tục khẳng định sức hút mạnh mẽ nhờ tính linh hoạt và dễ học. Ngôn ngữ này được ứng dụng rộng rãi trong nhiều lĩnh vực, từ khoa học dữ liệu, trí tuệ nhân tạo đến phát triển web. Sự phát triển của các thư viện như TensorFlow và PyTorch càng thúc đẩy Python trở thành ngôn ngữ lập trình được yêu thích nhất trong lĩnh vực AI.

3. Java



Java vẫn là một trong những ngôn ngữ lập trình phổ biến nhất, đặc biệt trong lĩnh vực phát triển ứng dụng doanh nghiệp và Android. Tính ổn định, khả năng mở rộng và cộng đồng hỗ trợ lớn là những điểm mạnh giúp Java duy trì vị thế quan trọng.

4. C/C++



"Cặp đôi hoàn hảo" C/C++ vẫn giữ vị trí quan trọng trong thế giới lập trình. Với hiệu suất cao và khả năng kiểm soát phần cứng, C/C++ là lựa chọn hàng đầu cho phát triển game, hệ thống nhúng và các ứng dụng yêu cầu tốc độ xử lý cao.

5. C#



C# là ngôn ngữ lập trình đa năng được phát triển bởi Microsoft. Ngôn ngữ này được sử dụng rộng rãi trong phát triển ứng dụng Windows, game (Unity) và phát triển web (.NET).

6. PHP



Mặc dù có nhiều ý kiến cho rằng PHP đang dần mất đi sự phổ biến, nhưng thực tế ngôn ngữ này vẫn được sử dụng rộng rãi trong phát triển web, đặc biệt là các hệ thống quản lý nội dung (CMS) như WordPress.

7. Go



Go là ngôn ngữ lập trình mã nguồn mở được phát triển bởi Google. Với hiệu suất cao, cú pháp đơn giản và khả năng xử lý đồng thời tốt, Go đang ngày càng được ưa chuộng trong phát triển web back-end và các ứng dụng cloud.

8. Swift




Swift là ngôn ngữ lập trình được Apple phát triển để thay thế Objective-C trong việc phát triển ứng dụng iOS và macOS. Với cú pháp hiện đại, dễ đọc và hiệu suất cao, Swift đang nhanh chóng trở thành lựa chọn phổ biến cho các nhà phát triển ứng dụng Apple.

9. Kotlin




Kotlin là ngôn ngữ lập trình hiện đại, được Google hỗ trợ chính thức cho phát triển ứng dụng Android. Kotlin có cú pháp ngắn gọn, dễ đọc và tương thích hoàn toàn với Java, giúp các nhà phát triển dễ dàng chuyển đổi và sử dụng.

10. Ruby




Ruby là ngôn ngữ lập trình mã nguồn mở, được ưa chuộng bởi tính linh hoạt và khả năng đọc hiểu cao. Ruby on Rails, framework phát triển web phổ biến, đã góp phần đưa Ruby trở thành lựa chọn phổ biến cho phát triển web.

Kết luận


Trên đây là top 10 ngôn ngữ lập trình phổ biến nhất năm 2024. Việc lựa chọn ngôn ngữ lập trình phù hợp phụ thuộc vào mục tiêu, sở thích và lĩnh vực hoạt động của mỗi người. Hy vọng bài viết này sẽ giúp bạn có cái nhìn tổng quan về xu hướng ngôn ngữ lập trình hiện nay và đưa ra lựa chọn phù hợp cho con đường phát triển sự nghiệp của mình.

Tự học lập trình Java qua các ví dụ [ cơ bản và nâng cao ]

Java là ngôn ngữ lập trình bậc cao phổ biến được nhiều lập trình viên yêu thích. Công nghệ Java được ứng dụng trong rất nhiều lĩnh vực khác nhau từ phần mềm destop, website, app, phần mềm hệ thống, ứng dụng trong Big Data,...

Tài liệu này cung cấp cho các bạn các các bài thực hành giúp bạn làm quen với Java từ cơ bản đến nâng cao.


Bài thực hành 01:  Cài đặt và thiết lập môi trường lập trình Java

Bài thực hành 02:  Ngôn ngữ lập trình Java cơ bản

Bài thực hành 03:  Lập trình hướng đối tượng với Java (OOP with Java)

Bài thực hành 04:  Xử lý ngoại lệ trong Java (Exceptions)

Bài thực hành 05:  So sánh và sắp xếp trong Java

Bài thực hành 06:  Java String, StringBuffer và StringBuilder

Bài thực hành 07:  Java Generics

Bài thực hành 08:  Java System.identityHashCode, Object.hashCode và Object.equals

Bài thực hành 09: Thao tác với file và thư mục trong Java

Bài thực hành 10: 

  • Java WeakReference,
  • Java SoftReference,
  • Java PhantomReference,
  • Java Reflection,
  • Java RMI,
  • Java Socket,
  • Java Stream,
  • Java Predicate,
  • Java BiPredicate,
  • Java Consumer,
  • Java BiConsumer,
  • Java Supplier,
  • Java Function,
  • Java BiFunction

Bài thực hành 11:  Lập trình đa luồng trong Java - Java Multithreading

Bài thực hành 12:  Kết nối CSDL trong Java

Bài thực hành 13: Một số vấn đề mở rộng trong Java

Bài thực hành 14:  Lập trình giao diện đồ hoạ với Swing trong Java (GUI Java Swing)



Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]

* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*




Giải thuật di truyền giải bài toán người du lịch (TSP)

Giải thuật (thuật toán) di truyền (GA).

Thuật toán di truyền là một kỹ thuật của khoa học máy tính nhằm tìm kiếm giải pháp thích hợp cho các bài toán tối ưu tổ hợp (combinatorial optimization). Giải thuật di truyền là một phân ngành của giải thuật tiến hóa vận dụng các nguyên lý của tiến hóa như di truyền, đột biến, chọn lọc tự nhiên, và trao đổi chéo.

Di truyền là hiện tượng chuyển những tính trạng của cha mẹ cho con cái thông qua gen của bố mẹ. Trong sinh học, di truyền chuyển những đặc trưng sinh học từ một sinh vật cha mẹ đến con cái và nó đồng nghĩa với di chuyển gen, gen thừa nhận mang thông tin sinh học hay thông tin di truyền.

Tiến hóa nói đến quá trình hoàn thiện, biến đổi dần để hoàn thiện hơn các bộ phận, chức năng của các sinh vật để phù hợp hơn với điều kiện sinh tồn. Trong sinh học, tiến hóa là sự thay đổi đặc tính di truyền của một quần thể sinh học qua những thế hệ nối tiếp nhau. Các quá trình tiến hóa làm nảy sinh sự đa dạng ở mọi mức độ tổ chức sinh học bao gồm loài, các cá thể sinh vật và cả các phân tử như ADN và protein.

Giải thuật di truyền (GA) là phương pháp tìm kiếm tối ưu ngẫu nhiên bằng cách mô phỏng theo sự tiến hóa của con người hay của sinh vật. GA được ứng dụng rộng rãi trong giải quyết các bài toán tối ưu, như bài toán người du lịch, bài toán người bán hàng, và nhiều bài toán khác.

 

Bài toán người du lịch

Bài toán người du lịch là một bài toán quan trọng trong lĩnh vực tối ưu hóa và khoa học máy tính. Hãy cùng tìm hiểu về nó!

Mô tả bài toán:

+ Một người du lịch muốn thăm quan n thành phố T1, T2, …, Tn.

+ Người du lịch xuất phát từ một thành phố bất kỳ và muốn đi qua tất cả các thành phố còn lại, mỗi thành phố đi qua duy nhất một lần rồi quay trở lại thành phố xuất phát.

+ Gọi Cij là chi phí đi từ thành phố Ti đến Tj.

+ Yêu cầu: Tìm một hành trình thỏa mãn yêu cầu trên sao cho tổng chi phí là nhỏ nhất.

 

Thuật toán GA giải bài toán người du lịch

Bước 1: Tạo quần thể

Bước 2: Đánh giá

- Thoả mãn điều kiện (tìm được giá trị độ dài quãng được tốt nhất (nhỏ nhất) hoặc tiến hoá đủ 1000 thế hệ (số thế hệ do người dung thiết lập)) => Bước 6

-  Chưa thoả điều kiện => Bước 3

Bước 3: Lựa chọn (chọn các cá thể có độ thích nghi tốt nhất (quãng đường ngắn nhất) => Bước 4

Bước 4: Lai ghép => Bước 5

Bước 5: Đột biến => Bước 2 (lặp lại)

Bước 6: Kết thúc.

Cài đặt thuật toán bằng Java

1- Tạo Project

 


2- Class GA

 







3- Class GATSP (class main)

 


4- Kết quả




Kết luận:

Thuật toán di truyền (Genetic Algorithm - GA) là một phương pháp tối ưu hóa dựa trên nguyên tắc của tiến hóa sinh học. Dưới đây là một số ứng dụng thú vị của thuật toán di truyền:

- Giải bài toán người du lịch (Traveling Salesman Problem - TSP): Trong bài toán này, người du lịch cần tìm hành trình qua tất cả các thành phố một lần duy nhất và quay trở lại thành phố xuất phát sao cho tổng chi phí là nhỏ nhất. GA có thể áp dụng để tìm lời giải gần đúng cho TSP.

- Tối ưu hóa hàm số: GA có thể tìm kiếm giá trị tối ưu của hàm số trong không gian nhiều biến.

- Lập lịch sản xuất: Trong việc lập lịch sản xuất, GA có thể tối ưu hóa thời gian sản xuất, tối thiểu hóa chi phí và tối đa hóa hiệu suất.

- Thiết kế mạng neuron: GA có thể tối ưu hóa trọng số của mạng neuron để đạt được hiệu suất tốt nhất.

- Tối ưu hóa kích thước bộ lọc trong xử lý ảnh: GA có thể tìm kích thước và hình dạng của bộ lọc để cải thiện chất lượng ảnh.

- Tối ưu hóa các tham số trong máy học: GA có thể tìm giá trị tối ưu cho các tham số của mô hình máy học.

Thuật toán di truyền là một công cụ mạnh mẽ để giải quyết các bài toán tối ưu và tìm kiếm lời giải gần đúng trong nhiều lĩnh vực khác nhau.

* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

Hướng dẫn cài đặt Netbean IDE

Netbean IDE là một công cụ (tool) lập trình miễn phí, phổ biến hiện nay thuộc sở hữu của Oracle. NetBean IDE là công cụ lập trình Java được ưu chuộng nhất hiện nay cùng với các công cụ lập trình khác như Eclipse, Jcreator, Visual Studio Code, Android Studio, ...

Hướng dẫn cài đặt Netbean IDE


Ngoài lập trình Java, Netbean còn dùng để lập trình với các ngôn ngữ lập trình khác như C/C++, PHP.
Bài viết này sẽ hướng dẫn các bạn từng bước cài đặt và sử dụng Netbean IDE - Công cụ hỗ trợ viết mã code miễn phí được xem là tốt nhất hiện nay, được sử dụng chủ yếu đối với các lập trình viên Java.

1. Tải về Java SE Development Kit (JDK)

Bước 1: Chọn phiên bản JDK cần sử dụng tại đây.



Bước 2: Lựa chọn phiên bản phù hợp với hệ điều hành (trong hướng dẫn này sẽ download phiên bản dành cho Window X64).

 Một vài trường hợp, Oracle yêu cầu bạn đăng nhập, đăng ký tài khoản, lúc này, đơn giản bạn đăng ký tài khoản là OK.


2. Tải về bộ cài đặt NetBeans IDE

Link download: NetBeans 12.3

Bước 1:



Bước 2:



Bước 3:



Bước 4:



Sau khi tải về 2 bộ cài đặt JDK và NetBeans IDE, chúng ta sẽ tiến hành cài đặt JDK trước và cài đặt NetBeans IDE sau đó.

 

Tiến hành cài đặt

1. Cài đặt Java SE Development Kit (JDK)

Bước 1: Chạy file JDK đã tải phía trên – Chọn Yes

Bước 2: Chọn Next

 

Bước 3: Chọn Next

Bước 4: Chọn Close

 

2. Cài đặt NetBeans

 

Bước 1: Chạy file NetBeans IDE đã tải phía trên – Chọn Yes

Bước 2: Chọn Next


Bước 3: Tích Accept, sau đó chọn Next

 

Bước 4: Chọn Browse để chỉnh lại đường dẫn cài đặt nếu cần thiết, sau đó chọn Next

 


Bước 5: Chọn Install

 

 

Bước 6: Chọn Finish để kết thúc cài đặt

Sau khi cài đặt thành công, trên màn hình sẽ xuất hiện Shortcut của Apach NetBeans IDE.

 

Thiết lập biến môi trường

 

Bước 1: Trên màn hình Desktop, click chuột phải vào Computer (This PC) sau đó chọn Properties.



 

Bước 2: Chọn Advanced system settings

Bước 3: Chọn Environment Variables



Bước 4: Trong System Variables, chọn “New…”



Bước 5: Trong hộp thoại New System Variable, điền thông tin như sau:

Variable name: JAVA_HOME
Variable value: C:\Program Files\Java\jdk-11.0.11 (điền đường dẫn thư mục đặt JDK)
Sau đó, click “OK” để hoàn tất việc đặt tên biến môi trường

Bước 6: Sửa đổi biến môi trường Path: Trong phần System Variable, ta sửa biến môi trường Path: Click đúp chuột vào dòng “Path”



Bước 7: Click “New” và điền %JAVA_HOME%\bin



 

Hướng dẫn sử dụng NetBeans IDE

Bước 1: Trên màn hình Desktop, click đúp vào Shortcut Apach NetBeans 12.3

 



Bước 2: Tạo dự án mới, chọn File/New Project (Ctrl + Shift + N)



Bước 3: Chọn Java with Ant/ Java Application/ Next



Bước 4: Sửa lại tên dự án (Project Name) và chọn vị trí lưu dự án (Browse phần Project Location), sau đó chọn “Finish”.



Bước 5: Kết quả



Đến đây, chúng ta đã hoàn thành cài đặt NetBeans IDE. Các phiên bản khác của Netbean bạn có thể cài đặt tương tự.

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]


Chúc các bạn thành công!

Tham khảo: fpt.edu_vn

 

* Có thể bản quan tâm: [MMO] Hướng Dẫn *Kiếm Tiền Tự Động* Với Các Ứng Dụng Treo Máy *CỰC KỲ ĐƠN GIẢN VÀ HIỆU QUẢ*

[Tự học lập trình Java] Bài 6: Thừa kế (Inheritance) và đa hình (Polymorphism)

[Tự học lập trình Java] Bài 6: Thừa kế (Inheritance) và đa hình (Polymorphism)

1. Thừa kế (inheritance) 

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]



1.1. Lớp kế thừa 

     Một lớp con (subclass) có thể kế thừa tất cả những vùng dữ liệu và phương thức của một lớp khác – lớp cha (siêu lớp - superclass). 

   Như vậy việc tạo một lớp mới từ một lớp đã biết sao cho các thành phần (fields và methods) của lớp cũ cũng sẽ thành các thành phần (fields và methods) của lớp mới. Khi đó ta gọi lớp mới là lớp dẫn xuất (derived class) từ lớp cũ (superclass). Có thể lớp cũ cũng là lớp được dẫn xuất từ một lớp nào đấy, nhưng đối với lớp mới vừa tạo thì lớp cũ đó là một lớp siêu lớp trực tiếp (immediate supperclass).

Dùng từ khóa extends để chỉ lớp dẫn xuất.

Ví dụ:
// super class B
class B{
 // …
}
// sub class A
class A extends B
{
 //…
}
1.2. Khái báo phương thức chồng
      Tính kế thừa giúp cho các lớp con nhận được các thuộc tính/phương thức public và protected của lớp cha. Đồng thời cũng có thể thay thế các phương thức của lớp cha bằng cách khai báo chồng. Chẳng hạn phương thức tinhgiaban() áp dụng trong lớp xega sẽ cho kết quả gấp 2.5 lần chi phí sản xuất thay vì gấp 2 chi phí sản xuất giống như trong lớp xemay.

Ví dụ:
public class xega extends xemay
{
public xega()
{ ... }

public xega(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx);
{
  this.nhasx = s_nhasx;
  this.model = s_model;
  this.chiphisx = f_chiphisx;
  this.thoigiansx = i_thoigiansx;
  this.so = 0;
}

public float tinhgiaban()
{
   return 2.5 * chiphisx;
 }
}

Java cung cấp 3 tiền tố/từ khóa để hỗ trợ tính kế thừa của lớp:
- public: lớp có thể truy cập từ các gói, chương trình khác.
- final: Lớp hằng, lớp không thể tạo dẫn xuất (không thể có con), hay đôi khi người ta gọi là lớp “vô sinh”.
- abstract: Lớp trừu tượng (không có khai báo các thành phần và các phương thức trong lớp trừu tượng). Lớp dẫn xuất sẽ khai báo, cài đặt cụ thể các thuộc tính, phương thức của lớp trừu tượng.

Chú ý: Trong Java không cho phép đa kế thừa, nghĩa là 1 lớp con chỉ kế thừa duy nhất từ 1 lớp cha (khác với C++), ngược lại 1 lớp cha có thể cho phép nhiều lớp con kế thừa.

2. Đa hình (polymorphism)
   Tính đa hình cho phép cài đặt các lớp dẫn xuất khác nhau từ một lớp nguồn. Một đối tượng có thể có nhiều kiểu khác nhau gọi là tính đa hình.

Ví dụ:
class A_Object
{
  //…
  void method_1()
  {
   //…
  }
}

class B_Object extends A_Object
{
   //…
   void method_1()
  {
    //…
  }
}

class C
{
  public static void main(String[] args)
  {
     // Tạo một mảng 2 phần tử kiểu A
     A_Object arr_Object = new A_Object[2];
     B_Object var_1 = new B_Object();
    // Phần tử đầu tiên của mảng arr_Object[0]tham
    // chiếu đến 1 đối tượng kiểu B_Object dẫnxuất
    // từ A_Object
   arr_Object[0] = var_1;
   A_Object var_2;
   for (int i=0; i<2; i++) {
     var_2 = arr_Object[i];
     var_2.method_1();
  }
 }
}

Vòng lặp for trong đoạn chương trình trên:
- Với i = 0 thì biến var_2 có kiểu là B_Object, và lệnh var_2.method_1() sẽ gọi thực hiện phương thức method_1 của lớp B_Object.
- Với i = 1 thì biến var_2 có kiểu là A_Object, và lệnh var_2.method_1() sẽ gọi thực hiện phương thức method_1 của lớp A_Object.

Trong ví dụ trên đối tượng var_2 có thể nhận kiểu A_Object hay B_Object. Hay nói các khác, một biến đối tượng kiểu A_Object như var_2 trong ví dụ trên có thể tham chiếu đến bất kỳ đối tượng nào của bất kỳ lớp con nào của lớp A_Object (ví dụ var_2 có thể tham chiếu đến đối tượng var_1, var_1 là đối tượng của lớp B_Object dẫn xuất từ lớp A_Object). Ngược lại

một biến của lớp con không thể tham chiếu đến bất kỳ đối tượng nào của lớp cha.

3. Phương thức từu tượng và lớp trừu tượng
   Lớp trừu tượng (abtract class) là lớp không có khai báo các thuộc tính thành phần và các phương thức. Các lớp dẫn xuất của nó sẽ khai báo thuộc tính, cài đặt cụ thể các phương thức của lớp trừu tượng.

  Phương thức trừu tượng (abstract method) là phương thức không có nội dung, chỉ được khai báo trong lớp trừu tượng.

Ví dụ:
abstract class A
{
   abstract void method_1(); // phương thức trừu tượng
 }
public class B extends A
{
   public void method_1()
  {
     // cài đặt chi tiết cho phương thức method_1
     // trong lớp con B.
     //…
   }
}

public class C extends A
{
public void method_1()
 {
    // cài đặt chi tiết cho phương thức method_1
    // trong lớp con C.
    //…
  }
}

Lưu ý: Các phương thức được khai báo dùng các tiền tố private và static thì không được khai báo là trừu tượng abstract. Tiền tố private thì không thể truy xuất từ các lớp dẫn xuất, còn tiền tố static thì chỉ dùng riêng cho lớp khai báo mà thôi.

4. Giao diện (interface)
 4.1.Khái niệm interface
     Như chúng ta đã biết một lớp trong java chỉ có một siêu lớp trực tiếp hay một cha duy nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi-inheritance) trong lập trình hướng đối tượng, Java thay thế bằng giao tiếp (interface). Một lớp có thể có nhiều giao tiếp (interface) với các lớp khác để thừa hưởng thêm vùng dữ liệu và phương thức của các giao tiếp này.

4.2.Khai báo interface
    Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là các hằng (khai báo dùng từ khóa final) và các phương thức của giao tiếp là trừu tượng (mặc dù không có từ khóa abstract).

   Trong các lớp có cài đặt các interface ta phải tiến hành cài đặt cụ thể các phương thức này.

Ví dụ:
 public interface sanpham
{
    static final String nhasx = “Honda VN”;
    static final String dienthoai = “08-8123456”;
    public int gia(String s_model);
 }
// khai báo 1 lớp có cài đặt interface
public class xemay implements sanpham
{
     // cài đặt lại phương thức của giao diện trong lớp
     public int gia(String s_model)
     {
        if (s_model.equals(“2005”))
           return (2000);
        else
     return (1500);
}
public String chobietnhasx()
{
    return (nhasx);
 }
}

Có một vấn đề khác với lớp là một giao diện (interface) không chỉ có một giao diện cha trực tiếp mà có thể dẫn xuất cùng lúc nhiều giao diện khác (hay có nhiều giao diện cha). Khi đó nó sẽ kế thừa tất cả các giá trị hằng và các phương thức của các giao diện cha. Các giao diện cha được liệt kê thành chuỗi và cách nhau bởi dấu phẩy “,”. Khai báo như sau:

public interface InterfaceName extends interface1, interface2, interface3
{
  //…

5. Lớp nội
   Lớp nội là lớp được khai báo bên trong 1 lớp khác. Lớp nội thể hiện tính đóng gói cao và có thể truy xuất trực tiếp biến của lớp cha.

Ví dụ:
public class A
{
   //…
    int <field_1>
    static class B
   {
      //…
      int <field_2>
     public B(int par_1)
     {
       field_2 = par_1 + field_1;
     }
   }
 }

Trong ví dụ trên thì chương trình dịch sẽ tạo ra hai lớp với hai files khác nhau: A.class và B.class

6. Lớp vô sinh
     Lớp không thể có lớp dẫn xuất từ nó (không có lớp con) gọi là lớp “vô sinh”, hay nói cách khác không thể kế thừa được từ một lớp “vô sinh”. Lớp “vô sinh” dùng để hạn chế, ngăn ngừa các lớp khác dẫn xuất từ nó.

     Để khai báo một lớp là lớp “vô sinh”, chúng ta dùng từ khóa final class. Tất cả các phương thức của lớp vô sinh đều vô sinh, nhưng các thuộc tính của lớp vô sinh thì có thể không vô sinh.

Ví dụ:
public final class A
{
    public final int x;
    private int y;
    public final void method_1()
    {
       //…
    }
public final void method_2()
  {
    //…
   }
 


[Tự học lập trình Java] Bài 5: Lớp (class) và đối tượng (object) trong Java

[Tự học lập trình Java] Bài 5: Lớp (class) và đối tượng (object) trong Java

1. Đối tượng và lớp

1.1. Lớp (class)
a. Khái niệm
    Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức(methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp. Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp (class instance).


b. Khai báo/định nghĩa lớp
 [access rights(tiền tố)] class <ClassName>
 {
      <kiểu dữ liệu> <field_1>;
      <kiểu dữ liệu> <field_2>;
     constructor
     method_1
     method_2
     ...
}

Trong đó:
  - class: là từ khóa của java
  - ClassName: là tên chúng ta đặt cho lớp
  - field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu của lớp.
  - constructor: là sự xây dựng, khởi tạo đối tượng lớp.
  - method_1, method_2: là các phương thức/hàm thể hiện các thao tác xử lý, tác động lên các thành phần dữ liệu của lớp.
  - access rights: Quyền truy xuất (public, private, protected)

Ví dụ: Khái báo lớp SinhVien

public class SinhVien{
  // khai báo các phương thức và thuộc tính
  …
}

1.2. Đối tượng (object)
  Đối tượng là sự cụ thể hóa của lớp. Đối tượng được khai báo tường mình bằng từ khóa new theo cú pháp:

   ClassName objectName = new ClassName();

Ví dụ: Khái báo đối tượng sinh vien A (A là một sinh viên cụ thể thuộc lớp SinhVien)
          SinhVien A=new SinhVien( );

2. Biến lớp và phương thức lớp
2.1. Thuộc tính - biến lớp (attribute)
   Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp được khai báo bên trong lớp như sau:

class <ClassName>
 {
   // khai báo những thuộc tính của lớp
  <tiền tố> <kiểu dữ liệu> < thuộc tính>;
  //…
 }

Để xác định quyền truy xuất của các đối tượng khác đối với vùng dữ liệu của lớp người ta thường dùng 3 tiền tố sau:
- public: có thể truy xuất từ tất cả các đối tượng khác
- private: một lớp không thể truy xuất vùng private của 1 lớp khác.
- protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp đó và những lớp dẫn xuất từ lớp đó truy cập đến.

Ví dụ: khai báo lớp xemay

public class xemay
{
  public String nhasx;
  public String model;
  private float chiphisx;
  protected int thoigiansx;
  // so luong so cua xe may: 3, 4 so
  protected int so;
  // sobanhxe là biến tĩnh có giá trị là 2 trong tất cả
  // các thể hiện tạo ra từ lớp xemay
  public static int sobanhxe = 2;
}

Chú giải:
  - Thuộc tính “nhasx”, “model”có thể được truy cập đến từ tất cả các đối tượng khác.
  - Thuộc tính “chiphisx” chỉ có thể truy cập được từ các đối tượng có kiểu “xemay”
  - Thuộc tính “thoigiansx”, so có thể truy cập được từ các đối tượng có kiểu “xemay” và các đối tượng của các lớp con dẫn xuất từ lớp “xemay”

Lưu ý: Thông thường để an toàn cho vùng dữ liệu của các đối tượng người ta tránh dùng tiền tố public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến vùng dữ liệu của một lớp từ các phương thức bên ngoài lớp đó.

2.2. Phương thức (method)
    Hàm hay phương thức (method) trong Java là khối lệnh thực hiện các chức năng, các hành vi xử lý của lớp lên vùng dữ liệu.

a. Khai báo phương thức:

<Tiền tố> <kiểu trả về> <Tên phương thức> (<danh sách đối số>)
{
  <khối lệnh>;
  [return];
}

Để xác định quyền truy xuất của các đối tượng khác đối với các phương thức của lớp người ta thường dùng các tiền tố sau:

- public: phương thức có thể truy cập được từ bên ngoài lớp khai báo.
- protected: có thể truy cập được từ lớp khai báo và những lớp dẫn xuất từ nó.
- private: chỉ được truy cập bên trong bản thân lớp khai báo.
- static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có nghĩa là phương thức đó có thể được thực hiện kể cả khi không có đối tượng của lớp chứa phương thức đó.
- final: phương thức có tiền tố này không được khai báo chồng ớ các lớp dẫn xuất.
- abstract: phương thức không cần cài đặt (không có phần source code), sẽ được hiện thực trong các lớp dẫn xuất từ lớp này.
- synchoronized: dùng để ngăn các tác động của các đối tượng khác lên đối tượng đang xét trong khi đang đồng bộ hóa. Dùng trong lập trình miltithreads.

<kiểu trả về>: có thể là kiểu void, kiểu cơ sở hay một lớp.
<Tên phương thức>: đặt theo qui ước giống tên biến.
<danh sách thông số>: có thể rỗng

Lưu ý:
Thông thường trong một lớp các phương thức nên được khai báo dùng từ khóa public, khác với vùng dữ liệu thường là dùng tiền tố private vì mục đích an toàn. Những biến nằm trong một phương thức của lớp là các biến cục bộ (local) và nên được khởia tạo sau khi khai báo.

Ví dụ:
public class xemay
{
  public String nhasx;
  public String model;
  private float chiphisx;
  protected int thoigiansx;
  // so luong so cua xe may: 3, 4 so
  protected int so;
  // là biến tĩnh có giá trị là 2 trong tất cả
  // các thể hiện tạo ra từ lớp xemay
  public static int sobanhxe = 2;
  public float tinhgiaban()
  {
    return 1.5 * chiphisx;
  }
}

b. Khởi tạo một đối tượng (Constructor)
     Contructor thật ra là một loại phương thức đặc biệt của lớp. Constructor dùng gọi tự động khi khởi tạo một thể hiện của lớp, có thể dùng để khởi gán những giá trị măc định. Các constructor không có giá trị trả về, và có thể có tham số hoặc không có tham số. Constructor phải có cùng tên với lớp và được gọi đến dùng từ khóa new.

    Nếu một lớp không có constructor thì java sẽ cung cấp cho lớp một constructor mặc định (default constructor). Những thuộc tính, biến của lớp sẽ được khởi tạo bởi các giá trị mặc định (số: thường là giá trị 0, kiểu luận lý là giá trị false, kiểu đối tượng giá trị null, …)

    Lưu ý: thông thường để an toàn, dễ kiểm soát và làm chủ mã nguồn chương trình chúng ta nên khai báo một constructor cho lớp.

Ví dụ:
public class xemay
{
   //…
   public xemay()
 }

public xemay(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx, int i_so);
 {
   nhasx = s_nhasx;
   model = s_model;
   chiphisx = f_chiphisx;
   thoigiansx = i_thoigiansx;
   so = i_so;
   // hoặc
   // this.nhasx = s_nhasx;
   // this.model = s_model;
   // this.chiphisx = f_chiphisx;
   // this.thoigiansx = i_thoigiansx;
   // this.so = i_so;
}

}

c. Biến this
    Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngông ngữ java. Một class trong Java luôn tồn tại một biến this, biến this được sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa nó.

Ví dụ:
<tiền tố> class A
{
   <tiền tố> int <field_1>;
   <tiền tố> String <field_2>;
   // Contructor của lớp A
  public A(int par_1, String par_2)
  {
   this.field_1 = par_1;
   this.field_2 = par_2;
  }

<tiền tố> <kiểu trả về> <method_1>()
{
  // …
}

<tiền tố> <kiểu trả về> <method_2>()
 {
   this.method_1()
   // …
  }
}

d. Khai báo chồng phương thức (overloading method)
    Việc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác tham số (khác kiểu dữ liệu, khác số lượng tham số) gọi là khai báo chồng phương thức (overloading method).

Ví dụ:
 public class xemay
 {
   // khai báo fields…
   public float tinhgiaban()
   return 2 * chiphisx;
 }

public float tinhgiaban(float huehong)
{
   return (2 * chiphisx + huehong);
 }
}

e. Đặc điểm hướng đối tượng trong java
    Hỗ trợ những nguyên tắc cơ bản của lập trình hướng đối tượng, tất cả các ngôn ngữ lập trình kể cả java đều có ba đặc điểm chung: tính đóng gói (encapsulation), tính đa hình (polymorphism), và tính kế thừa (inheritance).

3. Phương thức finalize()
    Trong java không có kiểu dữ liệu con trỏ như trong C, người lập trình không cần phải quá bận tâm về việc cấp phát và giải phóng vùng nhớ, sẽ có một trình dọn dẹp hệ thống đảm trách việc này. Trình dọn dẹp hệ thống sẽ dọn dẹp vùng nhớ cấp phát cho các đối tượng trước khi hủy một đối tượng.

    Phương thức finalize() là một phương thức đặc biệt được cài đặt sẵn cho các lớp. Trình dọn dẹp hệ thống sẽ gọi phương thức này trước khi hủy một đối tượng. Vì vậy việc cài đặt một số thao tác giải phóng, dọn dẹp vùng nhớ đã cấp phát cho các đối tượng dữ liệu trong phương thức finalize() sẽ giúp cho người lập trình chủ động kiểm soát tốt quá trình hủy đối tượng thay vị giao cho trình dọn dẹp hệ thống tự động. Đồng thời việc cài đặt trong phương thức finalize() sẽ giúp cho bộ nhớ được giải phóng tốt hơn, góp phần cải tiến tốc độ chương trình.

Ví dụ:
class A
 {
   // Khai báo các thuộc tính
   public void method_1()
  {
     //…
   }
   protected void finalize()
  {
    // Có thể dùng để đóng tất cả các kết nối
    // vào cơ sở dữ liệu trước khi hủy đối tượng.
    //…
   }
}

Một số tài liệu và khoá học bổ ích dành cho bạn: 

# Tài liệu: Lập trình hướng đối tượng JAVA core dành cho người mới bắt đầu học lập trình [Click để xem]

# Khoá học online: Lập trình Java trong 4 tuần [Click để xem]



4. Gói (packages) 

   Việc đóng gói các lớp lại tạo thành một thư viện dùng chung gọi là package. Một package có thể chứa một hay nhiều lớp bên trong, đồng thời cũng có thể chứa một package khác bên trong.

   Để khai báo một lớp thuộc một gói nào đấy ta phải dùng từ khóa package. Dòng khai báo gói phải là dòng đầu tiên trong tập tin khai báo lớp. Các tập tin khai báo lớp trong cùng một gói phải được lưu trong cùng một thư mục.

Lưu ý: Việc khai báo import tất cả các lớp trong gói sẽ làm tốn bộ nhớ. Thông thường chúng ta chỉ nên import những lớp cần dùng trong chương trình.

Ví dụ:
package phuongtiengiaothong;
class xemay
{
  // …
 }

class xega extends xemay
{
   //…
}

Khi đó muốn sử dụng lớp xemay vào chương trình ta sẽ khai báo như sau:

import phuongtiengiaothong.xemay;

5. Đóng gói (encapsulation)
     Cơ chế đóng gói trong lập trình hướng đối tượng giúp cho các đối tượng dấu đi một phần các chi tiết cài đặt, cũng như phần dữ liệu cục bộ của nó, và chỉ công bố ra ngoài những gì cần công bố để trao đổi với các đối tượng khác. Hay chúng ta có thể nói đối tượng là một thành tố hỗ trợ tính đóng gói.

    Đơn vị đóng gói cơ bản của ngôn ngữ java là class. Một class định nghĩa hình thức của một đối tượng. Một class định rõ những thành phần dữ liệu và các đoạn mã cài đặt các thao tác xử lý trên các đối tượng dữ liệu đó. Java dùng class để xây dựng những đối tượng. Những đối tượng là những thể hiện (instances) của một class.

    Một lớp bao gồm thành phần dữ liệu và thành phần xử lý. Thành phần dữ liệu của một lớp thường bao gồm các biến thành viên và các biến thể hiện của lớp. Thành phần xử lý là các thao tác trên các thành phần dữ liệu, thường trong java người gọi là phương thức. Phương thức là một thuật ngữ hướng đối tượng trong java, trong C/C++ người ta thường dùng thuật ngữ là hàm.

Xem thêm các ví dụ về Class và Object tại đây

Lập trình Java - ĐH FPT


--------------------------------------------------- 
Đoc thêm các bài khác

Bài 1: Chương trình JAVA đầu tiên
Bài 2: Các kiểu dữ liệu và toán tử trong
Bài 3: Các cấu trúc điều khiển trong Java
Bài 4 : Mảng và chuỗi trong Java
Bài 5: Lớp (class) và đối tượng (object) trong Java
Bài 6:Thừa kế (Inheritance) và đa hình (Polymorphism)
Ví dụ lập trình giao diện đồ họa với Java (GUI)
Ví dụ lập trình kết nối dữ liệu với Java (JDBC)
Ví dụ về lập trình Android