Chương 1: Tổng quan về OOP và Java

0

1.1. Tổng quan về OOP

1.1.1. Giới thiệu chung

Lập trình hướng đối tượng (Object Oriented Programming- OOP), hay còn gọi là lập trình định hướng đối tượng, là kĩ thuật lập trình hỗ trợ công nghệ đối tượng. OOP được xem là giúp tăng năng suất, đơn giản hóa độ phức tạp khi bảo trì cũng như mở rộng phần mềm bằng cách cho phép lập trình viên tập trung vào các đối tượng phần mềm ở bậc cao hơn. Ngoài ra, nhiều người còn cho rằng OOP dễ tiếp thu hơn cho những người mới học về lập trình hơn là các phương pháp trước đó.

Một cách giản lược, đây là khái niệm và là một nỗ lực nhằm giảm nhẹ các thao tác viết mã cho người lập trình, cho phép họ tạo ra các ứng dụng mà các yếu tố bên ngoài có thể tương tác với các chương trình đó giống như là tương tác với các đối tượng vật lý.

Những đối tượng trong một ngôn ngữ OOP là các kết hợp giữa mã và dữ liệu mà chúng được nhìn nhận như là một đơn vị duy nhất. Mỗi đối tượng có một tên riêng biệt và tất cả các tham chiếu đến đối tượng đó được tiến hành qua tên của nó. Như vậy, mỗi đối tượng có khả năng nhận vào các thông báo, xử lý dữ liệu (bên trong của nó), và gửi ra hay trả lời đến các đối tượng khác hay đến môi trường

1.1.2. Một số khái niệm

  • Đối tượng (object):

Các dữ liệu và chỉ thị được kết hợp vào một đơn vị đầy đủ tạo nên một đối tượng. Đơn vị này tương đương với một chương trình con và vì thế các đối tượng sẽ được chia thành hai bộ phận chính: phần các phương thức (method) và phần các thuộc tính (attribute).

Trong thực tế, các phương thức của đối tượng là các hàm và các thuộc tính của nó là các biến, các tham số hay hằng nội tại của một đối tượng (hay nói cách khác tập hợp các dữ liệu nội tại tạo thành thuộc tính của đối tượng). Các phương thức là phương tiện để sử dụng một đối tượng trong khi các thuộc tính sẽ mô tả đối tượng có những tính chất gì. Các phương thức và các thuộc tính thường gắn chặt với thực tế các đặc tính và sử dụng của một đối tượng. Các đối tượng thường được trừu tượng hóa qua việc định nghĩa của các lớp (class).

Tập hợp các giá trị hiện có của các thuộc tính tạo nên trạng thái của một đối tượng. Mỗi phương thức hay mỗi dữ liệu nội tại cùng với các tính chất được định nghĩa (bởi người lập trình) được xem là một đặc tính riêng của đối tượng. Nếu không có gì lầm lẫn thì tập hợp các đặc tính này gọi chung là đặc tính của đối tượng.

  • Lập trình hướng đối tượng là một phương pháp lập trình có các tính chất chính sau:
  • Tính trừu tượng(abstraction): Đây là khả năng của chương trình bỏ qua hay không chú ý đến một số khía cạnh của thông tin mà nó đang trực tiếp làm việc lên, nghĩa là nó có khả năng tập trung vào những cốt lõi cần thiết. Mỗi đối tượng phục vụ như là một “động tử” có thể hoàn tất các công việc một cách nội bộ, báo cáo, thay đổi trạng thái của nó và liên lạc với các đối tượng khác mà không cần cho biết làm cách nào đối tượng tiến hành được các thao tác. Tính chất này thường được gọi là sự trừu tượng của dữ liệu. Tính trừu tượng còn thể hiện qua việc một đối tượng ban đầu có thể có một số đặc điểm chung cho nhiều đối tượng khác như là sự mở rộng của nó nhưng bản thân đối tượng ban đầu này có thể không có các biện pháp thi hành. Tính trừu tượng này thường được xác định trong khái niệm gọi là lớp trừu tượng hay lớp cơ sở trừu tượng.
  • Tính đóng gói(encapsulation) và che giấu thông tin (information hiding): Tính chất này không cho phép người sử dụng các đối tượng thay đổi trạng thái nội tại của một đối tượng. Chỉ có các phương thức nội tại của đối tượng cho phép thay đổi trạng thái của nó. Việc cho phép môi trường bên ngoài tác động lên các dữ liệu nội tại của một đối tượng theo cách nào là hoàn toàn tùy thuộc vào người viết mã. Đây là tính chất đảm bảo sự toàn vẹn của đối tượng.
  • Tính đa hình(polymorphism): Thể hiện thông qua việc gửi các thông điệp (message). Việc gửi các thông điệp này có thể so sánh như việc gọi các hàm bên trong của một đối tượng. Các phương thức dùng trả lời cho một thông điệp sẽ tùy theo đối tượng mà thông điệp đó được gửi tới sẽ có phản ứng khác nhau. Người lập trình có thể định nghĩa một đặc tính (chẳng hạn thông qua tên của các phương thức) cho một loạt các đối tượng gần nhau nhưng khi thi hành thì dùng cùng một tên gọi mà sự thi hành của mỗi đối tượng sẽ tự động xảy ra tương ứng theo đặc tính của từng đối tượng mà không bị nhầm lẫn.

Thí dụ khi định nghĩa hai đối tượng “hinh_vuong” và “hinh_tron” thì có một phương thức chung là “chu_vi”. Khi gọi phương thức này thì nếu đối tượng là “hinh_vuong” nó sẽ tính theo công thức khác với khi đối tượng là “hinh_tron”.

  • Tính kế thừa(inheritance): Đặc tính này cho phép một đối tượng có thể có sẵn các đặc tính mà đối tượng khác đã có thông qua kế thừa. Điều này cho phép các đối tượng chia sẻ hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại. Tuy nhiên, không phải ngôn ngữ định hướng đối tượng nào cũng có tính chất này.

1.2. Tổng quan về Java

1.2.1 Lịch sử phát triển

Java là gì? Java là ngôn ngữ lập trình hướng đối tượng (tựa C++) do Sun Microsystem đưa ra vào giữa thập niên 90. Chương trình viết bằng ngôn ngữ lập trình java có thể chạy trên bất kỳ hệ thống nào có cài máy ảo java (Java Virtual Machine-JVM).

Ngôn ngữ lập trình Java do James Gosling và các công sự của Công ty Sun Microsystem phát triển.

Đầu thập niên 90, Sun Microsystem tập hợp các nhà nghiên cứu thành lập nên nhóm đặt tên là Green Team. Green có trách nhiệm xây dựng công nghệ mới cho ngành điện tử tiêu dùng. Để giải quyết vấn đề này nhóm nghiên cứu phát triển đã xây dựng một ngôn ngữ lập trình mới đặt tên là Oak tương tự như C++ nhưng loại bỏ một số tính năng nguy hiểm của C++ và có khả năng chạy trên nhiều nền phần cứng khác nhau. Cùng lúc đó world wide web bắt đầu phát triển và Sun đã thấy được tiềm năng của ngôn ngữ Oak nên đã đầu tư cải tiến và phát triển. Sau đó không lâu ngôn ngữ mới với tên gọi là Java ra đời và được giới thiệu năm 1995.

Java là tên gọi của một hòn đảo ở Indonexia, là nơi nhóm nghiên cứu phát triển đã chọn để đặt tên cho ngôn ngữ lập trình Java trong một chuyến đi tham quan và làm việc trên hòn đảo này. Hòn đảo Java này là nơi rất nổi tiếng với nhiều khu vườn trồng cafe, đó chính là lý do chúng ta thường thấy biểu tượng ly café trong nhiều sản phẩm phần mềm, công cụ lập trình Java của Sun cũng như một số hãng phần mềm khác đưa ra.

1.2.2 Đặc điểm ngôn ngữ

            Sun Microsystem chịu trách nhiệm phát triển các máy ảo Java chạy trên các hệ điều hành trên các kiến trúc CPU khác nhau.

– Thông dịch: Java là một ngôn ngữ lập trình vừa biên dịch vừa thông dịch. Chương trình nguồn viết bằng ngôn ngữ lập trình Java có đuôi *.java đầu tiên được biên dịch thành tập tin có đuôi *.class và sau đó sẽ được trình thông dịch thông dịch thành mã máy.

– Độc lập nền: Một chương trình viết bằng ngôn ngữ Java có thể chạy trên nhiều máy tính có hệ điều hành khác nhau (Windows, Unix, Linux, …) miễn sao ở đó có cài đặt máy ảo java (Java Virtual Machine). Viết một lần chạy mọi nơi (write once run anywhere).

Hình 1.1 Cách biên dịch truyền thống

Đối với các chương trình viết bằng C, C++ hoặc một ngôn ngữ nào khác, trình biên dịch sẽ chuyển tập lệnh thành mã máy (machine code),hay lệnh của bộ vi xử lý. Những lệnh này phụ thuộc vào CPU hiện tại trên máy bạn. Nên khi muốn chạy trên loại CPU khác, chúng ta phải biên dịch lại chương trình. Hình 2.1 thể hiện quá trình để thực thi chương trình viết bằng C++ trên các loại máy khác nhau.

Quá trình thực thi chương trình viết bằng Java trên các loại máy khác nhau:

          

  Hình 1.2 Dịch chương trình Java

– Hướng đối tượng: Hướng đối tượng trong Java tương tự như C++ nhưng Java là một ngôn ngữ lập trình hướng đối tượng hoàn toàn. Tất cả mọi thứ đề cập đến trong Java đều liên quan đến các đối tượng được định nghĩa trước, thậm chí hàm chính của một chương trình viết bằng Java (đó là hàm main) cũng phải đặt bên trong một lớp. Hướng đối tượng trong Java không có tính đa kế thừa (multi inheritance) như trong C++ mà thay vào đó Java đưa ra khái niệm interface để hỗ trợ tính đa kế thừa. Vấn đề này sẽ được bàn chi tiết trong chương 3.

– Đa nhiệm – đa luồng (MultiTasking – Multithreading): Java hỗ trợ lập trình đa nhiệm, đa luồng cho phép nhiều tiến trình, tiểu trình có thể chạy song song cùng một thời điểm và tương tác với nhau.

– Khả chuyển (portable): Chương trình ứng dụng viết bằng ngôn ngữ Java chỉ cần chạy được trên máy ảo Java là có thể chạy được trên bất kỳ máy tính, hệ điều hành nào có máy ảo Java. “Viết một lần, chạy mọi nơi” (Write Once, Run Anywhere).

– Hỗ trợ mạnh cho việc phát triển ứng dụng: Công nghệ Java phát triển mạnh mẽ nhờ vào “đại gia Sun Microsystem” cung cấp nhiều công cụ, thư viện lập trình phong phú hỗ trợ cho việc phát triển nhiều loại hình ứng dụng khác nhau cụ thể như: J2SE (Java 2 Standard Edition) hỗ trợ phát triển những ứng dụng đơn, ứng dụng client-server; J2EE (Java 2 Enterprise Edition) hỗ trợ phát triển các ứng dụng thương mại, J2ME (Java 2 Micro Edition) hỗ trợ phát triển các ứng dụng trên các thiết bị di động, không dây, …

1.2.3 Môi trường phát triển ứng dụng

Để viết mã nguồn java chúng ta có thể sử dụng trình soạn thảo NotePad hoặc một số môi trường phát triển hỗ trợ ngôn ngữ java như: Jbuilder của hãng Borland, Visual Café của hang Symantec, JDeveloper của hãng Oracle, Visual J++ của Microsoft, NetBean của hãng Sun Microsystem, Jcreator của XINOX software … Trong khuôn khổ giáo trình này cũng như để hướng dẫn sinh viên thực hành chúng tôi dùng công cụ JCreator LE v3.50 có thể download tại http://www.jcreator.com/download.htm hoặc NetBean 7.0 có thể download tại http://www.netbeans.org/downloads/.

Bộ công cụ phát triển JDK (Java Development Kit)

Sun Microsystem đưa ra ngôn ngữ lập trình Java qua sản phẩm có tên là Java Development Kit (JDK). Ba phiên bản chính là:

Java 1.0 – Sử dụng lần đầu vào năm 1995

Java 1.1 – Ðưa ra năm 1997 vớI nhiều ưu điểm hơn phiên bản trước.

Java 2 – Phiên bản mới nhất

JDK bao gồm Java Plug-In, chúng cho phép chạy trực tiếp Java Applet hay JavaBean bằng cách dùng JRE thay cho sử dụng môi trường thực thi mặ c định của trình duyệt.

JDK chứa các công cụ sau:

– Trình biên dịch, ‘javac’

Cú pháp: javac [options]sourcecodename.java

– Trình thông dịch, ‘java’

Cú pháp: java [options]classname

– Trình dịch ngược, ‘javap’

javap dịch ngược bytecode và in ra thông tin về các thuộc tính (các trường), các phương thức của một lớp.

Cú pháp: javap [options]classname

– Công cụ sinh tài liệu, ‘javadoc’

Tiện ích này cho phép ta tạo ra tệp HTML dựa trên các lời giải thích trong mã chương trình (phần nằm trong cặp dấu /*…. */).

Cú pháp: javadoc [options]sourcecodename.java

– Chương trình tìm lỗi – Debug, ‘jdb‘

Cú pháp: jdb [options]sourcecodename.java

Hay   jdb -host -password [options]sourcecodename.java

  • Cấu trúc ứng dụng Java

Chúng ta có thể xây dựng các loại chương trình Java như sau:

Applets

Applet là chương trình được tạo ra để sử dụng trên Internet thông qua các trình duyệt hỗ trợ Java như IE hay Netscape. Bạn có thể dùng Java để xây dựng Applet. Applet được nhúng bên trong trang Web. Khi trang Web hiển thị trong trình duyệt, Applet sẽ được tải về và thực thi tại trình duyệt.

Ứng dụng thực thi qua dòng lệnh

Các chương trình này chạy từ dấu nhắc lệnh và không sử dụng giao diện đồ họa. Các thông tin nhập xuất được thể hiện tại dấu nhắc lệnh.

Ứng dụng đồ họa

Đây là các chương trình Java chạy độc lập cho phép người dùng tương tác qua giao diện đồ họa.

Servlet

Java thích hợp để phát triển ứng dụng nhiều lớp. Applet là chương trình đồ họa chạy trên trình duyệt tại máy trạm. Ở các ứng dụng Web, máy trạm gửi yêu cầu tới máy chủ. Máy chủ xử lý và gửi kết quả trở lại máy trạm. Các Java API chạy trên máy chủ chịu trách nhiệm xử lý tại máy chủ và trả lời các yêu cầu của máy trạm. Các Java API chạy trên máy chủ này mở rộng khả năng của các ứng dụng Java API chuẩn. Các ứng dụng trên máy chủ này được gọi là các Servlet. hoặc Applet tại máy chủ. Xử lý Form của HTML là cách sử dụng đơn giản nhất của Servlet. Chúng còn có thể được dùng để xử lý dữ liệu, thực thi các giao dịch và thường được thực thi thông qua máy chủ Web.

Ưng dụng cơ sở dữ liệu

Các ứng dụng này sử dụng JDBC API để kết nối tới cơ sở dữ liệu. Chúng có thể là Applet hay ứng dụng, nhưng Applet bị giới hạn bởi tính bảo mật.

 

1.2.5 Các cấu trúc chương trình Java

Chương trình JAVA đầu tiên

Chúng ta hãy bắt đầu từ chương trình Java cổ điển nhất với một ứng dụng đơn giản. Chương trình sau đây cho phép hiển thị một thông điệp:

// This is a simple program called “First.java”

class First

{

                public static void main(String args[])

                {

                  System.out.println(“My first program in Java”);

                }

}

Tên file đóng vai trò rất quan trọng trong Java. Chương trình biên dịch Java chấp nhận phần mở rộng .java. Trong Java, mã lệnh phải nằm trong các lớp. Bởi vậy tên lớp và tên file phải trùng nhau. Java phân biệt chữ hoa và chữ thường (case-sensitive). Ví dụ tên file ‘First’ và ‘first’ là hai file khác nhau.

Để biên dịch mã nguồn, ta sử dụng trình biên dịch java. Trình biên dịch xác định tên của file nguồn tại dòng lệnh như mô tả dưới đây:

C:\jdk1.2.1\bin>javac First.java

Trình dịch java tạo ra file First.class chứa các mã “bytecodes”. Những mã này chưa thể thực thi được. Để chương trình thực thi được ta cần dùng trình thông dịch “java interpreter”

Lệnh được thực hiện như sau:

C:\jdk1.2.1\bin>java First

Kết quả sẽ hiển thị trên màn hình như sau: My first program in Java

 

Phân tích chương trình đầu tiên

// This is a simple program called “First.java”

Ký hiệu “// ” dùng để thuyết minh dòng lệnh. Trình biên dịch sẽ bỏ qua dòng thuyết minh này. Java còn hỗ trợ thuyết minh nhiều dòng. Loại thuyết minh này có thể bắt đầu với /* và kết thúc với */

/*This is a comment that

extends to two lines*/

/ *This is

a multi line

comment */

Dòng kế tiếp khai báo lớp có tên ‘First’. Để tạo một lớp thêm ta bắt đầu với từ khoá ‘class’, kế đến là tên lớp (và cũng chính là tên file).

class First

Tên lớp nói chung nên bắt đầu bằng chữ in hoa. Từ khoá ‘class’ khai báo định nghĩa lớp. ‘First’ là tên của lớp. Một định nghĩa lớp nằm trọn vẹn nằm giữa hai ngoặc móc mở ({) và đóng (}). Các ngoặc này đánh dấu bắt đầu và kết thúc một khối lệnh.

public static void main (String args[ ])

Đây là phương thức chính, từ đây chương trình bắt đầu việc thực thi của mình. Tất cả các ứng dụng java đều sử dụng một phương thức “main” này. Chúng ta sẽ tìm hiểu từng từ trong lệnh này.

Từ khoá ‘public’ là một chỉ định truy xuất. Nó cho biết thành viên của lớp có thể được truy xuất từ bất cứ đâu trong chương trình. Trong trường hợp này, phương thức “main” được khai báo ‘public’, bởi vậy JVM có thể truy xuất phương thức này.

Từ khoá ‘static’ cho phép main được gọi tới mà không cần tạo ra một thể hiện (instance) của lớp. Nhưng trong trường hợp này, bản copy của phương thức main được phép tồn tại trên bộ nhớ, thậm chí không có một thể hiện của lớp đó được tạo ra. Điều này rất quan trọng vì JVM trước tiên gọi phương thức main để thực thi chương trình. Vì lý do này phương thức main cần phải là tĩnh (static). Nó không phụ thuộc vào các thể hiện của lớp được tạo ra.

Từ khoá ‘void’ thông báo cho máy tính biết rằng phương thức sẽ không trả lại bất cứ giá trị nào khi thực thi chương trình.

Phương thức ‘main()’ sẽ thực hiện một số tác vụ nào đó, nó là điểm mốc mà từ đó tất cả các ứng dụng Java được khởi động.

‘String args[]’ là tham số dùng trong phương thức ‘main’. Các biến số trong dấu ngoặc đơn nhận từng thông tin được chuyển vào ‘main’. Những biến này là các tham số của phương thức. Thậm chí ngay khi không có một thông tin nào được chuyển vào ‘main’, phương thức vẫn được thực hiện với các dữ liệu rỗng – không có gì trong dấu ngoặc đơn.

‘args[]’ là một mảng kiểu “String”. Các đối số (arguments) từ các dòng lệnh được lưu vào mảng. Mã nằm giữa dấu ngoặc móc ({ }) của ‘main’ được gọi là ‘method block’. Các lệnh được thực thi trong ‘main’ cần được viết trong khối này.

System.out.println(“My first program in Java”);

Dòng lệnh này hiển thị chuỗi “My first program in Java” trên màn hình. Phát biểu ‘println()’ tạo ra một cổng xuất (output). Phương thức này cho phép hiển thị chuỗi được truyền vào ra ‘System.out’. Ở đây ‘System’ là một lớp đã định trước, nó cho phép truy nhập vào hệ thống và ‘out’ là một chuỗi xuất được kết nối với dấu nhắc (console).

Biên soạn: TxThanh – Apps1pro.com

Share.

About Author

Leave A Reply