Tổng quan về Java: Lập trình hướng đối tượng
Bài viết này giới thiệu tổng quan về đặc điểm hướng đối tượng trong ngôn ngữ lập trình Java.
Tài liệu tham khảo:
Chapter 2, Patrick Naughton and Herbertz Schidt, “Java –2 The Complete Reference” , Fifth edition, Tata McGraw-Hill Publishing Company Limited.
———————————————————
Lập trình hướng đối tượng là cốt lõi của Java. Trên thực tế tất cả các chương trình viết bằng Java đều là hướng đối tượng chứ không phải là một tùy chọn như trong C++.
Hai mô hình lập trình
Tất cả các chương trình máy tính đều bao gồm hai thành phần: mã lệnh và dữ liệu. Một vài chương trình được viết theo hướng quan tâm đến mã lệnh, nghĩa là quan tâm đến “Cái gì đang xảy ra”, và các chương trình khác có thể được viết theo hướng quan tâm đến dữ liệu, nghĩa là quan tâm đến “Cái gì đang bị tác động đến”. Hai mô hình này ảnh hưởng đến cách xây dựng chương trình. Cách đầu tiên gọi là mô hình hướng thủ tục. Theo cách tiếp cận này một chương trình được xem như là một dãy là bước tuần tự. Các ngôn ngữ lập trình cấu trúc như C sử dụng mô hình này. Tuy nhiên, vấn đề đối với cách tiếp cận này là kích thước lớn và tính phức tạp của chương trình. Cách tiếp cận thứ hai được gọi là lập trình hướng đối tượng. Lập trình hướng đối tượng tổ chức một chương trình theo xoay quanh dữ liệu của nó và một tập các giao tiếp được định nghĩa tác động đến dữ liệu đó.
Sự trừu tượng hóa
Một thành phần cơ bản của lập trình hướng đối tượng là sự trừu tượng hóa. Con người quản lý tính phức tạp thông qua sự trừu tượng hóa. Ví dụ, ta không nghĩ về chiếc xe hơi như là một tập gồm hàng ngàn chi tiết riêng biệt. Ta xem nó là một đối tượng cụ thể với các đặc điểm riêng của nó. Sự trừu tượng hóa này cho phép ta sử dụng chiếc xe hơi mà không bị rối rắm bởi sự phức tạp của các phần tạo nên chiếc xe.
Một cách hữu hiệu để quản lý sự trừu tượng hóa là sử dụng sự phân lớp. Điều này cho phép ta phân tầng sự phức tạp của hệ thống, chia nhỏ thành các phần có thể quản lý được. Ví dụ, xe hơi được xem là một đối tượng. Chi tiết hơn, xe hơi bao gồm nhiều hệ thống con như: tay lái, ghế ngồi, dàn âm thanh. Giàn âm thanh bao gồm máy nghe CD, băng đĩa …
Ba yếu tố 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 hướng đối tượng đều cung cấp các cơ chế cho phép bạn cài đặt mô hình hướng đối tượng. Đó là tính đóng gói, tính kế thừa và tính đa hình.
Tính đóng gói
Đây là cơ chế kết hợp giữa mã lệnh với dữ liệu mà nó xử lý, và tránh bị ảnh hưởng bởi sự can thiệp từ bên ngoài. Tính đóng gói được xem như là một lớp vỏ bọc bảo vệ mã lệnh và dữ liệu tránh khỏi sự truy cập tùy tiện từ các mã lệnh khác. Việc truy cập được điều khiển một cách chặt chẽ thông các các thủ tục đã được định nghĩa.
Tính kế thừa
Tính kế thừa là quá trình mà một đối tượng nhận được các tính chất từ một đối tượng khác. Thông thường, mỗi đối tượng cần được định nghĩa tất cả các tính chất của nó. Tuy nhiên, bằng cách sử dụng sự kế thừa, mỗi đối tượng chỉ cần được định nghĩa các tính chất riêng biệt của nó, các tính chất chung được định nghĩa ở trong đối tượng mà nó kế thừa.
Tính đa hình
Đây là đặc điểm cho phép một hình thức giao tiếp có thể được sử dụng cho nhiều hành động có tính chất giống nhau. Việc thực thi hành động cụ thể nào đó tùy thuộc vào tình huống xảy ra. Điều này làm giảm tính phức tạp của chương trình.
Kết hợp tính đóng gói, tính kế thừa và tính đa hình
Sự kết hợp các yếu tố này tạo ra một môi trường lập trình tốt hơn so với mô hình lập trình hướng thủ tục. Tính kế thừa giúp cho việc sử dụng lại mã lệnh đã được cài đặt và kiểm tra trước đó. Tính đóng gói cho phép bạn thay đổi sự cài đặt mà không phải quan tâm nhiều đến mã lệnh, bạn chỉ cần quan tâm đến sự giao tiếp với các lớp đã có. Tính đa hình cho phép bạn viết các chương trình rõ ràng, hợp lý, và linh hoạt.
Sự ra đời của Java
Bài viết này giới thiệu về sự ra đời của ngôn ngữ lập trình Java.
Tài liệu tham khảo:
Chapter 1, Patrick Naughton and Herbertz Schidt, “Java –2 The Complete Reference” , Fifth edition, Tata McGraw-Hill Publishing Company Limited.
—————————————————————–
Nền tảng được thiết lập cho Java
Vào cuối thập niên 80 và đầu thập niên 90, ngôn ngữ lập trình hướng đối tượng C++ được sử dụng phổ biến. Dường như các lập trình viên đã tìm được một ngôn ngữ lập trình hoàn hảo. Bởi vì C++ pha trộn tính hiệu quả cao và các yếu tố phong cách C với mô hình hướng đối tượng. Tuy nhiên, cũng như trong quá khứ, một lần nữa đã thay đổi sự phát triển của ngôn ngữ máy tính. Chỉ trong vòng vài năm, World Wide Web và Internet đã đến với số đông. Điều này chuẩn bị cho một cuộc cách mạng trong ngôn ngữ lập trình.
Sự ra đời của Java
Java được hình thành bởi James Gosling, Patrick Naughton, Chris Warth, Ed Frank, và Mike Sheridan tại Sun Microsystems năm 1991. Sau hơn 18 tháng để phát triển phiên bản đầu tiên. Ngôn ngữ này lúc đầu được gọi là “Oak” nhưng sau đó được đổi tên thành Java vào năm 1995. Ở giữa khoảng thời gian của phiên bản đầu tiên năm 1992 và thông báo công khai của Java vào năm 1995, nhiều người đã đóng góp vào sự thiết kế và tiến hóa của ngôn ngữ này.
Đáng ngạc nhiên là sự thúc đẩy ban đầu của Java không phải là Internet. Thay vào đó động cơ chính là sự cần thiết của một ngôn ngữ có nền tảng độc lập (hay là kiến trúc trung lập) có thể được dùng để tạo ra phần mềm được nhúng trong nhiều thiết bị tiêu dùng điện tử khác nhau. Ta có thể đoán được, nhiều kiểu CPU được dùng như là bộ điều khiển. Vấn đề rắc rối đối với C và C++ (hay hầu hết các ngôn ngữ khác) là chúng được thiết kế để được biên dịch cho một đối tượng nhất định. Mặc dù có thể biên dịch một chương trình C++ cho bất cứ loại CPU nào, để làm điều đó đòi hỏi một trình biên dịch C++ đầy đủ cho CPU đó. Vấn đề là trình biên dịch đó rất đắt đỏ và mất nhiều thời gian để tạo ra nó. Vì vậy cần một giải pháp dễ dàng và hiệu quả hơn. Trong nỗ lực để tìm ra giải pháp đó, Gosling và các đồng nghiệp bắt đầu làm việc trên một ngôn ngữ linh động và độc lập với nền tảng, nó có thể được dùng để sinh ra mã có thể thực thi được trên các CPU khác nhau dưới các môi trường khác nhau. Sự cố gắng này cơ bản dẫn đến sự ra đời của Java.
Nhiều đặc điểm của Java bắt nguồn từ C và C++. Những người thiết kế Java biết rằng sử dụng cú pháp tương tự C sử dụng đặc trưng hướng đối tượng của C++ sẽ làm cho ngôn ngữ này lôi cuốn được nhiều các lập trình viên C/C++ có kinh nghiệm. Thêm vào đó, Java chia sẻ một vài tính chất khác làm cho C và C++ thành công.
Trước hết, Java được thiết kế, thử nghiệm và cải tiến bởi thực tế của các lập trình viên. Nó là một ngôn ngữ dựa vào sự cần thiết và kinh nghiệm của những người đã nghĩ ra nó. Vì thế Java cũng là một ngôn ngữ của các lập trình viên. Thứ hai, Java có tính liên kết và logic nhất quán. Thứ ba, không kể đến hạn chế bắt buộc của môi trường Internet, Java mang đến cho lập trình viên khả năng điều khiển đầy đủ. Nếu một chương trình làm việc tốt hay tồi, chương trình đó phản ánh đúng chính nó. Java không phải là một ngôn ngữ lập trình để tập tập dượt mà là một ngôn ngữ dành cho các lập trình viên chuyên nghiệp
Bởi vì những đặc điểm tương tự giữa Java và C++, người ta có thể nghĩ đơn giản Java là phiên bản Internet của C++. Tuy nhiên, không hoàn toàn phải vậy. Java có ý nghĩa thực thực tế và nguyên lý khác. Trong khi Java chịu ảnh hưởng của C++ nhưng nó không phải là một phiên bản nâng cao của C++. Ví dụ, Java không tương thích với bất cứ phiên bản nào của C++. Dĩ nhiên, sự tương đồng với C++ có ý nghĩa là nếu bạn là lập trình viên C++, bạn sẽ cảm thấy dễ dàng khi làm việc với Java. Một điểm khác: Java không phải được thiết kế để thay thế cho C++. Java được thiết kế để giải quyết các vấn đề đang tồn tại. C++ được thiết kế để giải quyết các vấn đề dạng khác. Cả hai sẽ cùng tồn tại trong nhiều năm nữa.

