intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình hướng đố i tượng trong Java phần 1

Chia sẻ: Nguyễn Thị Hồng Ngọc Ngọc | Ngày: | Loại File: PDF | Số trang:17

131
lượt xem
30
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Lập trình hướng đối tượng trong Java ́ LẬP TRINH HƢƠNG ĐÔI TƢỢ NG TRONG JAVA ́ phần 6 Java là một ngôn ngƣ̃ lập trinh hƣơng đố i tƣợ ng . Nế u bạn chƣa bao giơ dùng ̀ ́ ̀ một ngôn ngƣ̃ lập trình hƣơng đố i tƣợ ng trƣơc đây , bạn cần phải hiểu các khái niệm ́ ́ sau : lập trình hƣơ ng đố i tƣợ ng (Object Oriented Programming) là gì ? đố i tƣợ ng ́ (Object), lơp (class) là gì , mố i quan hệ giƣ̃a đố i tƣợ ng và lơp...

Chủ đề:
Lưu

Nội dung Text: Lập trình hướng đố i tượng trong Java phần 1

  1. Lập trình hướng đố i tượng trong Java ́ LẬP TRINH HƢƠNG ĐÔI TƢỢ NG TRONG JAVA ́ phần 6 Java là một ngôn ngƣ̃ lập trinh hƣơng đố i tƣợ ng . Nế u bạn chƣa bao giơ dùng ̀ ́ ̀ một ngôn ngƣ̃ lập trình hƣơng đố i tƣợ ng trƣơc đây , bạn cần phải hiểu các khái niệm ́ ́ sau : lập trình hƣơ ng đố i tƣợ ng (Object Oriented Programming) là gì ? đố i tƣợ ng ́ (Object), lơp (class) là gì , mố i quan hệ giƣ̃a đố i tƣợ ng và lơp , gởi thông điệp ́ ́ (Messages) đến các đối tƣợng là gì ? I. KHÁI NIỆM LẬP TRINH HƢỚNG ĐỐI TƢỢNG 1. Lâp trình hƣớng đối tƣợng (Object Oriented Programming) ̣ Mỗi một chƣơng trinh máy tinh đề u gồ m có 2 phầ n : phầ n mã lệnh và phầ n dƣ̃ ̀ ́ liệu. Một số chƣơng trinh đặt trọng tâm ơ phầ n mã lệnh , số khác đặt trọng tâm ơ phầ n ̉ ̉ ̀ dƣ̃ liệu. Tƣ đó dẫn đế n 2 mô hinh quyế t đinh nên cấ u trúc của chƣơng trinh : một trả lơi ̣ ̀ ̀ ̀ ̀ cho câu hỏi “Điề u gì đang xảy ra” , và một cho “Cái gì đang chịu tác động” . Mô hình 1 gọi là mô hình hƣớng xử lý , nó mô tả nhƣ là một chƣơ ng trình bao gồ m một chuỗi các bƣơc thƣ̣ c hiện (mã lệnh). Nhƣng khi chƣơng trình càng ngày càng lơn và phƣc tạp thì ́ ́ ́ khó khăn để sử dụng mô hình thứ nhất. Vì vậy mô hình thứ 2 đƣợ c đƣa ra , đó là mô hinh hƣơng đố i tƣợ ng . Chƣơng ̀ ́ trình của bạn sẽ xây dựng dựa vào dữ liệu và phần giao diện đƣợc định nghĩa cho phầ n dƣ̃ liệu đó. Mô hình này đƣợ c mô tả nhƣ là dƣ̃ liệu điề u khiể n truy xuấ t đố i vơi mã ́ lệnh. Ngôn ngƣ̃ lập trình hƣơng đố i tƣợ ng có các khả năng sau : ́ - Mô phỏng thế giơi thƣ̣ c một cách tƣ̣ nhiên bơi các đố i tƣợ ng và mố i quan hệ giƣ̃a ̉ ́ chúng, thuận tiện cho việc thiế t kế hệ thố ng phƣc tạp ́ - Thƣa kế mã có sẵn một cách dễ dàng , giúp tiết kiệm công sứ c và nâng cao năng suấ t ̀ của ngƣời lập trình, dễ bảo tri, dễ nâng cấ p, mơ rộng ̉ ̀ 2. Trƣu tƣợng hoá (Abstraction) ̀ Con ngƣơi đã đơn giản hoá các vấ n đề phƣc tạp thông qua sƣ̣ trƣu tƣợ ng hoá . ̀ ́ ̀ Ví dụ , ngƣơi sƣ dụng máy tinh kh ông nhin máy tinh một cách phƣc tạp . Nhơ sƣ̣ trƣu ̉ ̀ ́ ̀ ́ ́ ̀ ̀ 1
  2. Lập trình hướng đố i tượng trong Java tƣợ ng hoá mà ngƣơi ta có thể sƣ dụng máy tinh mà không quan tâm đế n cấ u trúc chi ̉ ̀ ́ tiế t bên trong máy tinh. Họ chỉ sử dụng chúng nhƣ là một thực thể ́ Cách tốt nhất để nắm vƣ̃ng kỹ thuật trƣu tƣợ ng là dùng hệ thố ng phân cấ p . Điề u ̀ này cho phép bạn phân lớp các thành phần có ý nghĩa của cả hệ thống phức tạp , chia nhỏ chúng thành những phần đơn giản có thể quản lý đƣợc . Nhìn bên ngoài má y tính là một đối tƣợng , nế u nhìn sâu hơn một cấ p , máy tính bao gồm một số bộ phận : hộp điề u khiể n, màn hình, bàn phím, chuột..., các bộ phận này lại bao gồm các bộ phận nhỏ hơn, ví dụ nhƣ hộp điều khiển có bảng m ạch chính chứa CPU , các mạch giao tiếp gắn trên bảng mạch chinh , đia cƣng , ổ đĩa mềm… Nhờ sự trừu tƣợng hoá mà bạn không ́ ̃ ́ quan tâm đế n chi tiế t tƣng bảng mạch , mà chỉ quan tâm mối quan hệ , giao tiế p giƣ̃a ̀ các bộ phận . Một mạch giao tiếp dù có chức năng ly kỳ thế nào đi nữa , bạn có thể sử dụng không mấy khó khăn nếu đƣợc ấn vừa vặn vào khe cắm trên bảng mạch chính. Sƣ̣ phân cấ p trƣu tƣợ ng một hệ thố ng phƣc tạp có thể áp dụng cho các ch ƣơng ̀ ́ trình máy tính . Phầ n dƣ̃ liệu tƣ một chƣơng trinh hƣơng xƣ lý kinh điể n có thể trƣu ̉ ̀ ̀ ́ ̀ tƣợ ng hoá thành các đố i tƣợ ng thành phầ n . Dãy các xử lý trở thành các thông điệp giƣ̃a các đố i tƣợ ng . Vì thế các đối tƣợng cần có hoạt động đặc trƣng riêng . Bạn có thể coi các đố i tƣợ ng này nhƣ nhƣ̃ng thƣ̣ c thể độc lập tiế p nhận các yêu cầ u tƣ bên ngoài . ̀ Đây là phầ n cố t lõi của lập trình hƣơng đố i tƣợ ng. ́ II. CƠ CHẾ TRIỂN KHAI MÔ HINH HƢƠNG ĐÔI TƢỢNG ́ ́ Tấ t cả các ngôn ngƣ̃ lập trình hƣơng đố i tƣợ ng đề u có các cơ chế cho phép bạn ́ triể n khai các mô hình hƣơng đố i tƣợ ng. Đó là tính đóng gói, kế thƣa, và tính đa hình. ́ ̀ 1. Tính đóng gói (Encapsulation) Đây là cơ chế dùng một vỏ bọc kết hợp phần dữ liệu và các thao tác trên dữ liệu đó (phầ n mã lệnh ) thành một thể thống nhất , tạo nên sự an toàn , tránh việc sử dụng không đúng thiế t kế , bảo vệ cho mã lệnh và dữ liệu chống việc tr uy xuấ t tƣ nhƣ̃ng đoạn ̀ mã lệnh bên ngoài. Trong Java tính đóng gói thể hiện qua khái niệm lơp (Class). Lơp là hạt nhân của ́ ́ Java, tạo nền tảng cho lập trình hƣớng đối tƣợng trong Java . Nó định nghĩa dữ liệu và các hành vi của nó (dƣ̃ liệu và mã lệnh ), gọi là các thành viên của lớp , dùng chung cho các đối tƣợng cùng loại . Tƣ sƣ̣ phân tich hệ thố ng , ngƣơi ta trƣu tƣợ ng nên các lơp . ̀ ́ ̀ ̀ ́ Sau đó các đố i tƣợ ng đƣợ c tạo ra theo khuôn mẫu của lơp . Mỗi đố i tƣợ ng thuộc một ́ lơp có dƣ̃ liệu và hành vi đinh nghia cho lơp đó , giố ng nhƣ là sinh ra tƣ một khuôn đúc ̣ ́ ̃ ́ ̀ 2
  3. Lập trình hướng đố i tượng trong Java của lớp đó . Vì vậy mà l ớp là khuôn mẫu của đối tƣợng , đố i tƣợ ng là thể hiện của một lơp. Lơp là cấ u trú c logic , còn đối tƣợng là cấu trúc vật lý . Dƣ̃ liệu đinh nghia trong lơp ̣ ́ ́ ̃ ́ gọi là biến , mã lệnh gọi là phƣơng thức . Phƣơng thƣc đinh nghia cho việc sƣ dụng dƣ̃ ̣ ̉ ́ ̃ liệu nhƣ thế nào . Điề u này có nghia là hoạt động của lơp đƣợ c đinh nghia thông qua ̣ ̃ ́ ̃ phƣơng thƣc. ́ Các đặc trƣng của lớp gồm có hai phần chính : thuộc tính (Attribute) và hành vi (Behavior). Giả sử bạn phải tạo ra giao diện với ngƣời dùng và cần có những nút nhấn (Button). Thế thì trƣ ớc hết bạn xây dựng lớp Button với các thuộc tính nhƣ nhãn ghi trên nút , chiề u rộng, chiề u cao , màu của nút , đồ ng thơi quy đinh hành vi của nút nhấ n , ̣ ̀ nghĩa là nút nhấn cần phản ứng nhƣ thế nào khi đƣợc chọn , phát yêu cầ u gì , có đổi màu hay nhấp nháy chi không . Vơi lơp Button nhƣ vậy , bạn có thể tạo ra nhanh chóng ́́ nhƣ̃ng nút nhấ n cụ thể phục vụ cho các mục đích khác nhau Gói là kỹ thuật c ủa Java , dùng để phân hoạch không gian tên lơp , giao diện ́ thành những vùng dễ quản lý hơn, thể hiện tinh đóng gói của Java. ́ 2. Tính kế thừa (Inheritance) Tính kế thừa là khả năng xây dựng các lớp mới từ các lớp đã có . Tính đóng gói cũng tác động đến tính kế thừa . Khi lơp đóng gói một số dƣ̃ liệu và phƣơng thƣc , lơp ́ ́ ́ mơi sẽ kế thƣa mọi cấ u trúc dƣ̃ liệu và các phƣơng thƣc của lơp mà nó kế thƣa . Ngoài ́ ̀ ́ ́ ̀ ra nó có thể bổ sung các dƣ̃ liệu và các phƣơng thƣc của riêng minh. ́ ̀ Nó rất q uan trọng vì nó ƣng dụng cho khái niệm cây phân cấ p (mô hình ́ TopDown). Không sƣ dụng cây phân lơp , mỗi lơp phải đinh nghia tấ t cả các dƣ̃ liệu và ̣ ̉ ́ ́ ̃ phƣơng thƣc của mình một cách rõ ràng. Nế u sƣ dụng sƣ̣ kế thƣa, mỗi lơp chỉ cần định ̉ ́ ̀ ́ nghĩa thêm những đặc trƣng của mình. Ví dụ : Xe có thể xem nhƣ một lớp và các xe Pergout , BWM, Dream là các đố i tƣợ ng của lớp xe. Các xe đều có thể lái đi, dƣng lại... Tƣ lơp xe ơ trên, ta có thể xây dƣ̣ ng các ̉ ̀ ̀́ lơp xe đạp, xe ôtô. Xe ôtô có thêm máy và có thể tƣ̣ khơi động… ̉ ́ 3. Tính đa hình (Polymorphism) Khi một lơp đƣợ c kế thƣa tƣ các lơp tổ tiên thì nó có thể thay đổ i cách thƣc làm ́ ̀ ̀ ́ ́ việc của lơp tổ tiên trong một số phƣơng t hƣc nào đó (nhƣng tên , kiể u trả về , danh ́ ́ sách tham đối của phƣơng thức thì vẫn giữ nguyên ). Điề u này gọi là viế t chồ ng . Nhƣ vậy vơi một tên phƣơng thƣc , chƣơng trình có thể có các hành động khác nhau tùy ́ ́ thuộc vào lơp của đố i tƣợ ng gọi phƣơng thƣc. Đó là tính đa hình ́ ́ 3
  4. Lập trình hướng đố i tượng trong Java Ví dụ : vơi một phƣơng thƣc chạy , xe ôtô , xe máy có thể tăng ga , còn xe đạp thì phải ́ ́ đạp… Tính đa hình còn thể hiện ở việc một giao diện có thể sử dụng cho các hoạt động của một lớp tổng quát , hay còn gọi là “một giao diện , nhiề u phƣơng thƣc” . Có ́ nghĩa là có thể thiết kế một giao diện tổng quát cho một nhóm các hành vi liên quan . Điề u này giảm thiể u sƣ̣ phƣc tạp bằ ng cách cho phép một giao diện có thể sƣ dụng cho ̉ ́ các hoạt động của một lớp tổng quát . Trình biên dịch sẽ xác định hoạt động cụ thể nào sẽ đƣợc thi hành tùy theo điều kiện . Bạn chỉ cần nhớ các giao diện của lớp tổng quát và sử dụng nó. Sƣ̣ kế t hợ p đúng đắ n giƣ̃a : đa hình , đóng gói và kế thƣa tạo nên một môi ̀ trƣơng lập trình có khả năng phát triể n tố t hơn rấ t nhiề u so vơi môi trƣơng không hỗ trợ ̀ ́ ̀ hƣơng đố i tƣợ ng. Một cây phân cấ p lơp thiế t kế tố t là điề u căn bản cho việc sƣ dụng lại ̉ ́ ́ nhƣ̃ng đoạn mã lệnh mà bạn đã tố n công sƣc nhiề u cho việc phát triể n và kiể m tra ́ . Tính đóng gói cho phép bạn sử dụng các đối tƣợng và ra lệnh thi hành tới chúng mà không phá vỡ cấ u trú c các đoạn mã lệnh đã bảo vệ bơi giao diện của các lơp . Sƣ̣ đa ̉ ́ hình cho phép bạn tạo ra những đoạn mã lệnh gọn gàng , dễ đọc, dễ hiể u và có tính ổ n đinh. ̣ Java là ngôn ngƣ̃ lập trình hƣơng đố i tƣợ ng nên có đầ y đủ cá c tính năng trên , ́ thƣ viện lơp Java đƣợ c cung cấ p khá đầ y đủ cho ngƣơi lập trinh để bắ t đầ u một dƣ̣ án ́ ̀ ̀ m ơi ́ 4
  5. Lập trình hướng đố i tượng trong Java Chƣơng : ĐỐI TƢỢNG VÀ LỚP, MẢNG I. XÂY DƢ̣ NG LƠP ́ Khi đinh nghia một lơp , bạn chỉ ra thuộc tính mà nó chứa đƣợc ̣ thể hiện bằ ng ̃ ́ biế n (Member Variable) và hành vi đƣợc thể hiện bởi hàm (Method) Các biến định nghĩa bên trong một lớp gọi là các biến thành viên (Member Variables). Mã lệnh chứa trong các phƣơng thức (Method). Các phƣơng thức và biế n đinh nghia trong lơp gọi chung là thành phầ n của lơp . Trong hầ u hế t các lơp , các biến ̣ ̃ ́ ́ ́ thể hiện đƣợ c truy cập bơi các phƣơng thƣc đinh nghia trong lơp đó . Vì vậy, chính các ̣ ̉ ́ ̃ ́ phƣơng thƣc quyế t đinh dƣ̃ liệu của lơp có thể dùng nhƣ thế nào . Lơp đinh nghia một ̣ ̣ ́ ́ ́ ̃ kiể u dƣ̃ liệu mơi, dùng để tạo các đối tƣợng thuộc kiểu đó. ́ Dạng đầy đủ của một định nghĩa lớp nhƣ sau : Lớp đƣợc truy xuất chung cho các [public] Package khác , mặc đinh chỉ ̣ có các đoạn mã trong cùng một gói mơi có ́ quyề n truy xuấ t nó Lơp trƣu tƣợ ng, không thể khơi tạo ̉ ́ ̀ [abstract] Lớp hằng không có lớp con , không kế [final] thƣa ̀ Tên lơp ́ class ClassName Kế thƣa lơp cha SuperClass ̀ ́ [extends SuperClass] Giao diện đƣợ c cài đặt bơi Class ̉ [implements Interfaces] Khai báo các biế n { //Member Variables Declarations Khai báo các phƣơng thƣc ́ // Methods Declarations } Ví dụ : Tạo một lớp Box đơn giản với ba biến : width, height, depth /* Đinh nghia lơp ̣ ̃́ */ class Box { double width; double height; 5
  6. Lập trình hướng đố i tượng trong Java double depth; } II. TẠO ĐỐI TƢỢNG 1. Khai báo đố i tƣợng Để có đƣợ c các đố i tƣợ ng của một lơp phải qua hai giai đoạn : ́  ClassName ObjectName; Ví dụ : Box myBox Khai bá o biến myBox có kiể u lơp Box . Khai báo này thƣ̣ c ra không cấ p phát ký ́ ức đủ chứa đối tƣợng thuộc lớp Box , mà chỉ tạo ra quy chiếu trỏ đến đối tƣợng Box . Sau câu lệnh này , quy chiế u myBox xuấ t hiện trên ký ƣc chƣa giá tri ̣ null chỉ ra rằ ng nó ́ ́ chƣa trỏ đế n một đố i tƣợ ng thƣ̣ c tế nào Khác với câu lệnh khai báo biến kiểu sơ cấp là dành chỗ trên ký ức đủ chứa một trị thuộc kiểu đó : Ví dụ : int i; Sau câu lệnh này, biế n nguyên i hình thành.  Sau đó, để thực sự tạo ra một đối tƣợng và gán địa chỉ của đối tƣợng cho biến này, dùng toán tử new ObjectName = new ClassName(); Ví dụ : myBox = new Box();  Có thể kết hợp cả hai bƣớc trên vào một câu lệnh : ClassName ObjectName = new ClassName(); Ví dụ : Box myBox = new Box(); Box myBox2 = myBox; myBox2 tham chiế u đế n cùng đố i tƣợ ng mà myBox tham chiế u myBox width height Box Object m depth ybox myBox2 m ybox 2. Cách truy xuất thành phần của lớp 6
  7. Lập trình hướng đố i tượng trong Java  Biế n khai báo trong đinh nghia lơp gồ m có hai loại : ̣ ̃́ - Biế n đố i tƣợ ng (Instance Variable hay Object Variable) : chỉ thuộc tính đối tƣợng , khi truy xuấ t phải khơi tạo đố i tƣợ ng ̉ + Cách khai báo biến đối tƣợng : Type InstanceVar; + Cách truy cập biến đối tƣợng : ObjectName.InstanceVar - Biế n lơp (Class Variable) : về bản chấ t là biế n toàn cục , là biến tĩnh đƣợc tạo lập một ́ lầ n cùng vơi lơp , dùng chung cho mọi đối tƣợng thuộc lớp, khi truy xuất không cầ n khơi ̉ ́́ tạo đối tƣợng, để trao đổi thông tin của các đố i tƣợ ng cùng lơp ́ + Cách khai báo biến lớp : static Type ClassVar; + Cách truy cập biến lớp : ClassName.ClassVar  Hàm khai báo trong định nghĩa lớp gồm có hai loại : - Hàm đối tƣợng (Object Method) : cách truy xuấ t hàm đố i tƣợ ng nhƣ biế n đố i tƣợ ng ObjectName.ObjectMethod(Parameter-List) - Hàm lớp (Class Method) : thông thƣơng một thành phầ n của lơp chỉ truy xuấ t trong sƣ̣ ̀ ́ liên kế t vơi một đố i tƣợ ng thuộc lơp của nó . Tuy nhiên , có thể t ạo ra một thành phần ́ ́ mà có thể dùng một độc lập một mình, không cầ n tham chiế u đế n một đố i tƣợ ng cụ thể , có thể đƣợc truy xuất trƣớc khi bất kỳ đối tƣợng nào của lớp đó đƣợc tạo ra, bằ ng cách đặt trƣơc khai báo của nó từ khoá static. Cách truy xuất hàm lớp : ́ ClassName.ClassMethod(Parameter-List) Các hàm toán học của lớp Math trong Package Java.Lang là hàm lơp nên khi gọi không ́ cầ n phải khơi tạo đố i tƣợ ng ̉ Ví dụ : double a = Math.sqrt(453.28); Ví dụ 1: class BaiTho { // Biế n lơp ́ static int i; // Biế n đố i tƣợ ng String s; BaiTho(String ss) { // Hàm khởi tạo s = ss; i++; 7
  8. Lập trình hướng đố i tượng trong Java } void content( ) { System.out.println(s); } } class UngDung { public static void main(String args[]){ BaiTho p1 = new BaiTho(“Chi co thuyen moi hieu”); BaiTho p2 = new BaiTho(“Bien menh mong nhuong nao ”); p1.content(); p2.content(); System.out.println(“So cau tho la : “+BaiTho.i); } } Khi tạo đối tƣợng p1, p2 bơi toán tƣ new, hàm dựng BaiTho() đƣợ c gọi, và i tăng ̉ ̉ lên 1 Ví dụ 2: class BaiTho2 { static int i; String s; BaiTho2(String ss) { // Hàm khởi tạo s = ss; i++; } static int number() { // Hàm lớp return i; } // Hàm đối tƣợng String content() { return s; } } class UngDung2 { public static void main (String args[]) { System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”); BaiTho2.p1 = new BaiTho2(“Chi co thuyen moi hieu”); 8
  9. Lập trình hướng đố i tượng trong Java BaiTho2.p2 = new BaiTho2(“Bien menh mong nhuong nao”); System.out.println(“Bai tho co “+BaiTho2.number()+“ cau”); System.out.println(“Cau tho\n“+p1.content().toUpperCase()+”\nco” + p1.content().length() +” ky tu”); System.out.println(“Tu \”tinh yeu\“ bat dau sau ky tu thu“+ p2.content().indexOf(“tinh yeu”)+” trong cau\n”+ p2.content().toUpperCase()); } } Gọi hàm lớp BaiTho 2.number() lúc chƣa gọi hàm dựng BaiTho 2 để khởi tạo đối tƣợng sẽ cho trị 0 p1.content() trả về một đối tƣợng String III. GIƠI THIỆU VỀ PHƢƠNG THỨC ́ 1. Khai báo phƣơng thƣc (hàm) ́ Dạng tổng quát của một phƣơng thức nhƣ sau : điề u khiể n truy [acess] xuấ t hàm lớp [static] hàm trừu tƣợng [abstract] hàm hằng [final] [Type] MethodName(Parameter-List) throws exceptions { // Body of method } - Type : Kiể u dƣ̃ liệu do hàm trả về , có thể là kiểu bất kỳ , kể cả các kiể u lơp do bạn tạo ́ ra. Nế u hàm không trả về giá tri ̣ nào, kiể u trả về của nó phải là void. - Các hàm có kiểu trả về không phải là void sẽ trả về một giá tri ̣ cho chƣơng trình gọi nó dùng dạng câu lệnh return nhƣ sau : return biể u thƣc; ́ 9
  10. Lập trình hướng đố i tượng trong Java Giá trị của biểu thức đƣợc tính và trả về cho hàm - Tấ t cả thông tin bạn muố n truyề n đƣợ c gơi thông qua tham số nằ m trong hai dấ u ̉ () ngay sau tên hàm. Nế u không có tham số vẫn phải có ( ) Parameter-List : Danh sách tham đố i phân cách bơi các dấ u phẩ y , mỗi tham đố i phải ̉ đƣợ c khai báo kiể u, có thể là kiểu bất kỳ, có dạng : Type Parameter1, Type Parameter2 ... 2. Phạm vi truy xuất thành phần của lớp Các điều khiển truy xuất của Java là public, private và protected. protected chỉ áp dụng khi có liên quan đến kế thừa sẽ xét đến sau Khi bổ sung tiề n tố cho một thành phầ n của lơp (biế n và hàm) là : ́ - Tƣ khoá public : chỉ ra rằng thành phần này có thể đƣợc truy xuất bởi bất kỳ dòng ̀ lệnh nào dù ơ trong hay ngoài lơp mà nó khai báo ̉ ́ - private : chỉ có thể đƣợc truy xuất trong lớp của nó , mọi đoạn mã nằ m ngoài lơp , kể ́ cả những lớp con đều không có quyền truy xuất - Khi không có điề u khiể n truy xuấ t nào đƣợ c dùng, mặc nhiên là public nhƣng chỉ trong gói của nó, không thể truy xuấ t tƣ bên ngoài gói của nó ̀ 3. Phƣơng thƣc main() ́ Khi chạy ƣng dụng độc lập , bạn chỉ tên Class muốn chạy , Java tim gọi hàm ́ ̀ main() trƣơc tiên trong Class đó , phƣơng thƣc main sẽ điề u khiể n chạy các phƣơng ́ ́ thƣc khác. ́ Dạng tổng quát của phƣơng thức main() public static void main(String args[]) { // Body of Method } - Một chƣơng trình chỉ cầ n một lơp có phƣơng thƣc main () gọi là lớp ứng dụng độc lập ́ ́ Primary Class. - Tƣ khoá static cho phép hàm main () đƣợ c gọi khi không cầ n khơi tạo đố i tƣợ ng . Vì ̉ ̀ main() đƣợ c trinh thông dich của Java gọi trƣơc khi bấ t kỳ lơp nào đƣợ c khơi tạo ̣ ̉ ̀ ́ ́ - Tƣ khoá void cho biế t hàm main() không trả về giá tri ̣ ̀ - Tƣ khoá public chỉ ra rằ ng hàm này đƣợ c gọi bơi dòng lệnh bên ngoài lơp khi chƣơ ng ̉ ̀ ́ trình khởi động. - Tham đố i String args [ ] khai báo tham số tên args thuộc lơp String , chƣa chuỗi ký tƣ̣ . ́ ́ 10
  11. Lập trình hướng đố i tượng trong Java Tham đố i này giƣ̃ các tham đố i dòng lệnh dùng khi thi hành chƣơng trinh. ̀ Ví dụ 1 : class ViDu { public static void main (String args[]) { for (int i=0; i < args.length; i++) { System.out.println(“Tham doi thu “+i+”: “+args[i]); } } } Khi chạy chƣơng trình : C:\>java ViDu Thu tham doi dong lenh  Tham doi thu 0 : Thu Tham doi thu 1 : tham .... C:>java ViDu Thu “tham doi” “dong lenh”  Tham doi thu 0 : Thu Tham doi thu 1 : tham doi Tham doi thu 2 : dong lenh Ví dụ 2 : class ViDu2; public static void main(String args[]) { int sum = 0; float avg = 0; for (int i=0; ijava ViDu2 1 2 3  Tong = 6 Trung binh = 2 11
  12. Lập trình hướng đố i tượng trong Java 4. Hàm khởi tạo (Constructor) Có những thao tác cầ n thƣ̣ c hiện mỗi khi đố i tƣợ ng lầ n đầ u tiên đƣợ c tạo nhƣ khơi tạo giá tri ̣ cho các biế n . Các công việc này có thể làm tự động bằng cách dùng ̉ hàm khởi tạo. Hàm khởi tạo có cùng tên với lớp mà nó thuộc về , chỉ đƣợc tƣ̣ động gọi bơi toán ̉ tƣ new khi đố i tƣợ ng thuộc lơp đƣợ c tạo . Hàm khởi tạo không có giá trị trả về , khi đinh ̣ ̉ ́ nghĩa hàm có thể ghi void hay không ghi. Ví dụ : - kích thƣớc hộp đƣợc khởi tạo tự động khi đối tƣợng đƣợ c tạo. class Box { double width; double height; double depth; double volume() { return width * height * depth; } Box(double w, double h, double d) { width = w; height = h; depth = d; } } class BoxDemo { public static void main (String args[ ]) { Box myBox1 = new Box(10,20,15); Box myBox2 = new Box(3,6,9); double vol; vol = myBox1.volume(); System.out.println(“Thể tich là : “+vol); ́ vol = myBox2.volume(); System.out.println(“Thể tich là : “+vol); ́ } } - Khi bạn không đinh nghia tƣơng mi nh hàm khơi tạo cho một lơp , Java sẽ tạo hàm ̣ ̉ ̃ ̀ ́ 12
  13. Lập trình hướng đố i tượng trong Java khơi tạo mặc nhiên cho lơp đó . Vì vậy các chƣơng trình trƣớc đó vẫn làm việc bình ̉ ́ thƣơng. Hàm khởi tạo mặc nhiên không có danh sách tham đối , tƣ̣ động khơi tạo tấ t cả ̉ ̀ các biế n của đố i tƣợ ng về tri ̣ rỗng theo các quy ƣơc mặc đinh của Java , trị 0 cho kiể u ̣ ́ số , ký tự „\0‟ cho kiể u ký tƣ̣ char, trị false cho kiểu boolean, trị null cho các đối tƣợng - Hàm khởi tạo cũng có thể đƣợc nạp chồng nhƣ hàm bình thƣờng ̣ (sẽ nói rõ ở phần sau) nghĩa là ta đƣợc phép định nghĩa nhiều hàm khởi tạo khác nhau ở danh sách tham đố i hay kiể u tham đố i 5. Hàm hủy Các đối tƣợng cấp phát động bằng toán tử new , khi không tồ n tại tham c hiế u nào đến đối tƣợng, đố i tƣợ ng đó xem nhƣ không còn cầ n đế n nƣ̃a và bộ nhơ cho nó có ́ thể đƣợ c tƣ̣ động giải phóng bơi bộ thu gom rác (garbage collector). Trình thu gom rác ̉ hoạt động trong một tuyến đoạn (Thread) độc lập vơi chƣơng trinh của bạn . Bạn không ́ ̀ phải bận tâm gì đối với công việc này. Sau này bạn sẽ hiể u rõ tuyế n đoạn là thế nào Tuy nhiên, Java cũng cho phép ta viế t hàm hủy, có thể cũng cần thiết cho những trƣơng hợ p nào đó . Hàm hủy trong Java chỉ đƣợc gọi bởi trình thu gom rác , do vậy ̀ bạn khó đoán trƣớc vào lúc nào hàm hủy sẽ đƣợc gọi Dạng hàm hủy nhƣ sau : protected void finalize() { // Body of Method } 6. Tƣ khoá this ̀ Nế u biế n đƣợ c đinh nghia trong thân hàm , đó là biế n cục bộ chỉ tồ n tại khi hàm ̣ ̃ đƣợ c gọi . Nế u biế n cục bộ nhƣ vậy đƣợ c đặt tên trùng vơi biế n đố i tƣợ ng hoặc biế n ́ lơp, nó sẽ che khuất biến đối tƣợng hay biến lớp trong thân hàm : ́ Ví dụ : class ViDu { // Biến đối tượng int test = 10; void printTest() { // Biế n cục bộ int test = 20; System.out.println(“test = “+test); // In biế n cục bộ 13
  14. Lập trình hướng đố i tượng trong Java } public static void main(String args[]) { ViDu a = new ViDu(); a.printTest(); } } Tƣ khoá this có thể dùng bên trong bấ t cƣ phƣơng thƣc nào để tham chiế u đế n ̀ ́ ́ đố i tƣợ ng hiện hành, khi biế n đố i tƣợ ng trùng tên vơi biế n cục bộ. ́ Ví dụ : Thay dòng lệnh trên : System.out.println(“test = “+this.test); // In biế n cục bộ , this chỉ đố i tượng a 7. Nạp chồng hàm (Overloaded Methods) Trong cùng một lớp, Java cho phép bạn đinh nghia nhiề u hàm trùng tên vơi điề u ̣ ̃ ́ kiện các hàm nhƣ vậy phải có danh sách tham đố i khác nhau, nghĩa là khác nhau về số tham đố i hoặc kiể u của các tham đố i. Khả năng nhƣ vậy gọi là sự nạp chồng hàm. Java chỉ phân biệt hàm này với hàm khác dựa vào số tham đối và kiểu của các tham đối , bấ t chấ p tên hàm và kiể u của kế t quả trả về. Ví dụ : // MyRect.java import java.awt.Point; class MyRect { int x1 = 0; int y1 = 0; int x2 = 0; int y2 = 0; MyRect buildRect(int x1, int y1, int x2, int y2) { this.x1 = x1; this.y1 = y1; this.x2 = x2; this.y2 = y2; return this; 14
  15. Lập trình hướng đố i tượng trong Java } MyRect buildRect(Point topLeft, Point bottomRight) { x1 = topLeft.x; y1 = topLeft.y; x2 = bottomRight.x; y2 = bottomRight.y; return this; } MyRect buildRect(Point topLeft, int w, int h) { x1 = topLeft.x; y1 = topLeft.y; x2 = x1+w; y2 = y1 + h; return this; } void display() { System.out.print(“Doi tuong MyRect : ”); } } Thật ra , trong gói awt có sẵn lơp Rectangle chuyên dùng để biể u diễn hình chƣ̃ ́ nhật. Lơp MyRect của ta chỉ dùng để minh hoạ cho khái niệm nạp chồ ng hàm ́ . Trong lơp MyRect có nhƣ̃ng hàm giúp bạn tạo ra đố i tƣợ ng MyRect vơi nhƣ̃ng yế u tố cho ́ ́ trƣơc khác nhau : ́ - Cho trƣơc toạ độ góc trên trái x1, y1 và toạ độ góc dƣới phải x2, y2 ́ - Cho trƣơc góc trên trái và góc dƣơi phải của hinh chƣ̃ nhật dƣơi dạng đố i tƣợ ng Point ́ ́ ̀ ́ - Cho trƣơc toạ độ góc trên trái của hình chữ nhật dạng đối tƣợng Point cùng chiều ́ rộng, chiề u cao Nhơ khả năng nạp chồ ng hàm , bạn chỉ cần nhớ một tên hàm cho các hàm khác ̀ nhau cùng chƣc năng ́ Chƣơng trinh sƣ dụng lơp MyRect xây dƣ̣ ng ơ trên : ̉ ̉ ̀ ́ import java.awt.Point; class UngDung { public static void main(String args[]) { 15
  16. Lập trình hướng đố i tượng trong Java MyRect rect = new MyRect(); rect.buildRect(25,25,50,50); rect.display(); rect.buildRect(new Point(10,10), new Point(20,20)); rect.display(); rect.buildRect(new Point(10,10), 50, 50); rect.display(); } } 8. Truyề n tham đố i Java dùng cả hai cách truyề n tham đố i : truyề n bằ ng giá tri ̣ và truyề n bằ ng tham chiế u, tùy vào cái gì đƣợc truyền - Khi ta truyề n một kiể u sơ cấ p cho phƣơng thƣc , nó sẽ truyền bằng giá trị . Vì vậy ́ nhƣ̃ng gì xảy ra với tham đối trong phƣơng thức , khi ra khỏi phƣơng thƣc sẽ hế t tác ́ dụng - Khi ta truyề n một đố i tƣợ ng (kiể u phƣc hợ p ) cho phƣơng thƣc , nó sẽ truyền bằng ́ ́ tham chiế u . Vì vậy , thay đổ i ơ đố i tƣợ ng bên trong phƣơng thƣ c ảnh hƣơng đế n đố i ̉ ̉ ́ tƣợ ng dùng làm tham đố i. Ví dụ 1 : class ViDu { void tinhToan(int i, int j) { i *= 2; j /= 2; } } class UngDung { public static void main(String args) { ViDu o = new ViDu(); int a = 15, b = 20; System.out.println(“a và b trƣớc khi gọi : “+a+ “ ”+b); o.tinhToan(a, b); System.out.println(“a và b sau khi gọi : “+a+” “+b); } 16
  17. Lập trình hướng đố i tượng trong Java } Kết quả của chƣơng trình : a và b trƣơc khi gọi : 15 20 ́ a và b sau khi gọi : 15 20 Ví dụ 2 : class ViDu { int a, b; ViDu (int i, int j) { a = i; b = j; } void tinhToan(ViDu o) { o.a *= 2; 0.b /= 2; } } class UngDung { public static void main(String args[]) { ViDu o = new ViDu(15, 20); System.out.println(“o.a và o.b trƣơc khi gọi : “+o.a+” “+o.b); ́ o.tinhToan(o); System.out.println(“o.a và o.b sau khi gọi : “+o.a+” “+o.b); } } Kết quả chƣơng trình : o.a và o.b trƣơc khi gọi : 15 20 ́ o.a và o.b sau khi gọi : 30 10 17
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2