oop 2

36
2009-2010 OOP - http://mim.hus.edu.vn/elearning 1 Bài 2: Sử dụng đối tượng Giảng viên: Nguyễn Thị Minh Huyền [email protected] Đỗ Thanh Hà [email protected]

Upload: thai-hoc-vu

Post on 28-Nov-2014

2.057 views

Category:

Education


4 download

DESCRIPTION

Slide java o lop

TRANSCRIPT

Page 1: Oop 2

2009-2010OOP -

http://mim.hus.edu.vn/elearning 1

Bài 2: Sử dụng đối tượng

Giảng viên: Nguyễn Thị Minh Huyền

[email protected]

Đỗ Thanh Hà

[email protected]

Page 2: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 2

Tài liệu tham khảo

BigJava - Chương 2, 4, 6, 7

Page 3: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 3

Kiểu dữ liệu

Chương trình = Cấu trúc dữ liệu + giải thuật (N. Wirth)

Dữ liệu trong Java

Kiểu dữ liệu nguyên thủy: Số nguyên, số thực, kí tự và xâu kí tự, lôgic (boolean)

Đối tượng

Page 4: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 4

Kiểu dữ liệu nguyên thủy (1)

Tên kiểu Ý nghĩa Kích thước Miền giá trị

char kí tự 2 bytes kí tự bảng mã Unicode

byte số nguyên rất ngắn 1 byte -128 127

short số nguyên ngắn 2 bytes -215 215 – 1

int số nguyên 4 bytes -231 231 – 1

long số nguyên dài 8 bytes -2255 2255 – 1

float số thực (chính xác đến 6 chữ số thập phân)

4 bytes 1.4*10-45 3.4*1038

double số thực (chính xác đến 15 chữ số thập phân)

8 bytes 4.9*10-324 1.7*10308

boolean lôgic 1 bit true, false

Page 5: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 5

Kiểu dữ liệu nguyên thủy (2)

Kiểu trống: void

Mỗi kiểu nguyên thủy đều có lớp bao (wrapper class): Character, Byte, Short, Integer, Long, Float, Double, Boolean, Void

Xâu kí tự: Lớp String Ép kiểu (casting):

(typeName) expression int x;

x = 1.23; // Error

x = (int) 1.23; // x = 1

Page 6: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 6

Các toán tử

Số học: +, -, *, /

Gán: =, +=, -=, *=, /=

Tăng, giảm: ++, --

So sánh: ==, !=, >, >=, <, <=

Lôgic: ||, &, !

Thao tác từng bit: & (AND), | (OR), ^ (XOR)

Dịch chuyển bit: <<, >>, >>>

Thứ tự ưu tiên: như trong C

Page 7: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 7

Tên

Các loại tên: tên biến, tên phương thức, tên lớp

Quy tắc đặt tên: Không được trùng với từ khoá

Bao gồm các chữ cái, chữ số và dấu _

Không được bắt đầu bằng chữ số

Phân biệt chữ hoa chữ thường

Quy ước đặt tên: Tên biến, tên phương thức bắt đầu bằng chữ thường, tên

lớp bắt đầu bằng chữ hoa, tên hằng viết hoa hoàn toàn

Nếu tên là một chuỗi các từ thì chữ cái đầu các từ sau đều viết hoa (VD: oneVariable, oneMethod, OneClass)

Page 8: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 8

Biến (1)

Lưu giữ giá trị thuộc kiểu dữ liệu nào đó

Định nghĩa biến

Khai báo: typeName variableName; // dễ gây lỗi

Khai báo và khởi tạo giá trị biến: typeName variableName = value;

Ví dụ: String greeting = "Hello, World!";

PrintStream printer = System.out;

int luckyNumber = 13;

Page 9: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 9

Biến (2)

Thay đổi (gán) giá trị biến: variableName = value;

Ví dụ: int luckyNumber = 13;

luckyNumber = 12;

Như trong C, có phép gán dạng +=, -=, *=, /=, ++, --

Khái niệm hằng trong Java: biến chỉ có thể gán giá trị một lần final typeName CONSTNAME;

final typeName CONSTNAME = value;

Page 10: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 10

Câu lệnh điều khiển (1)

Cú pháp câu lệnh điều khiển như trong C

Lệnh điều kiện if (condition)

statement1else

statement2 (condition) ? statement1 : statement2;

switch (variable){case <value1>: statement1

break;…case < valuen>: statementn

break;

default: statementn+1}

Page 11: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 11

Câu lệnh điều khiển (2)

Lệnh lặp for (initialization; condition; update)

statement while (condition)

statement do

statementwhile (condition);

Điều khiển trong vòng lặp: Chuyển sang bước lặp tiếp theo continue;

Thoát khỏi vòng lặp break;

Page 12: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 12

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

Đối tượng (object): Thực thể mà ta thao tác trong chương trình (bằng cách gọi các phương thức)

Mỗi đối tượng thuộc vào một lớp (class):

System.out thuộc lớp PrintStream

Page 13: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 13

Phương thức (1)

Phương thức (method): Dãy lệnh thao tác trên dữ liệu của các đối tượng

Các đối tượng được xử lí trong chương trình bằng cách gọi tới các phương thức (hàm) của đối tượng đó

Tập các phương thức của một lớp gọi là giao diện của lớp đó

Đặc tả giao diện cho biết người ta có thể làm gì với đối tượng

Page 14: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 14

Phương thức (2)

Khi sử dụng một phương thức, cần biết các yếu tố sau: Tên phương thức

Tham biến ẩn (implicit parameter): phương thức đó của đối tượng nào

Các tham biến hiện (explicit parameters) và kiểu của chúng: dữ liệu đầu vào (input) của phương thức, tức là các đối của phương thức/hàm

Giá trị trả lại (return value) và kiểu của nó

Quyền truy nhập tới phương thức đó (private, public, protected)

Page 15: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 15

Phương thức (3)

Một phương thức có thể không có tham biến hiện

Một phương thức cũng có thể không có tham biến ẩn, đó là trường hợp của các phương thức tĩnh (static)

Một phương thức có thể không trả lại giá trị nào, khi đó kiểu trả lại của phương thức là void

Tên phương thức là tải bội (overloaded) nếu như trong một lớp có định nghĩa 2 phương thức trùng tên nhưng danh sách các kiểu tham biến hiện khác nhau

Page 16: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 16

Phương thức (4)

Phương thức đặc biệt

Mỗi lớp có một hay nhiều hàm dựng (constructor)

Được gọi khi cần tạo một đối tượng mới thuộc lớp đó

Tên hàm dựng trùng với tên lớp

Giá trị trả lại của hàm dựng là một đối tượng của lớp đó

Mục đích của hàm dựng là khởi tạo giá trị cho các thuộc tính của đối tượng đó

Trong Java không có hàm huỷ (destructor). Việc giải phóng bộ nhớ của đối tượng được thực hiện

tự động

Page 17: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 17

Định nghĩa phương thức

Trong một lớp, khi khai báo phương thức cần chỉ ra: Quyền truy nhập phương thức, kiểu giá trị trả lại, tên phương thức, danh sách tham biến hiện (kiểu dữ liệu, tên tham biến) VD 1: 2 phương thức sau thuộc giao diện của lớp String

public int length() // return type: int; no explicit parameter

public String replace(String target, String replacement)

// return type: String; // 2 explicit parameters of type String

VD 2: println là tên phương thức tải bội của lớp PrintStream public void println(String output)

public void println(int output)

Page 18: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 18

Lời gọi phương thức (1)

Mỗi lời gọi phương thức xác định đối tượng có phương thức (tham biến ẩn), tên phương thức và danh sách các tham biến hiện VD: System.out.println("Hello")

System.out là tham biến ẩn tương ứng với tên đối tượng

println là tên phương thức

"Hello" là tham biến hiện - xâu cần in ra

Khi định nghĩa một phương thức trong một lớp, nếu cần gọi tới một phương thức khác của cùng lớp đó thì không cần chỉ ra tham biến ẩn của phương thức gọi đến.

Page 19: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 19

Lời gọi phương thức (2)

Ví dụ

String greeting = "Hello, World!";

System.out.println(greeting.length());

Page 20: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 20

Sử dụng đối tượng (1)

Xét ví dụ thao tác với các đối tượng hình chữ nhật

Trong thư viện các lớp có sẵn trong Java, có lớp Rectangle bao gồm các đối tượng hình chữ nhật

Đây là 3 đối tượng hình chữ nhật:

Page 21: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 21

Sử dụng đối tượng (2)

Các thuộc tính (dữ liệu) của các đối tượng hình

chữ nhật gồm:

x, y: Toạ độ đỉnh góc trên bên trái hình chữ nhật

width, height: chiều rộng, chiều cao hình chữ nhật

Page 22: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 22

Sử dụng đối tượng (3)

Giao diện (tập các phương thức) của lớp Rectangle:

Nhiều hàm dựng, trong đó có Rectangle(int x, int y,

int width, int height)

Một số phương thức cho phép lấy giá trị các thuộc tính của 1 đối tượng hình chữ nhật như getX(), getWidth(), ...

Một số phương thức cho phép thay đổi giá trị các thuộc tính của 1 đối tượng hình chữ nhật như setSize(int width,

int height), translate(int x, int y), ...

Một số phương thức khác cho phép thao tác với các đối tượng hình chữ nhật và các điểm

Page 23: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 23

Sử dụng đối tượng (4)

Phương thức truy cập (accessor/getter method) và phương thức biến đổi (mutator/setter method) thuộc tính đối tượng VD: truy cập - getX, getY; biến đổi -translate

Dùng để cho phép truy cập và biến đổi giá trị các thuộc tính riêng (có quyền truy nhập là private) của 1 đối tượng Bảo đảm tính toàn vẹn (integrity) dữ liệu khi thao tác

trên các thuộc tính này (VD: chiều dài hình chữ nhật không được là số âm)

Page 24: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 24

Sử dụng đối tượng (5)

Tạo 1 đối tượng mới thuộc 1 lớp

new ClassName(parameters)

ClassName(parameters) là 1 hàm dựng

Trả lại tham chiếu (reference) tới đối tượng mới được tạo

VD: Tạo đối tượng hình chữ nhật

Rectangle box = new Rectangle(5, 10, 20, 30);

Cùng 1 đối tượng có thể có nhiều biến kiểu đối tượng tham chiếu (trỏ) đến

Rectangle box2 = box;

Biến kiểu đối tượng do vậy khác với biến kiểu nguyên thuỷ

Page 25: Oop 2

int luckyNumber = 13;

int luckyNumber2 = luckyNumber;

luckyNumber2 = 12;

Page 26: Oop 2

Rectangle box = new Rectangle(5, 10, 20, 30);

Rectangle box2 = box;

box2.translate(15, 25);

Page 27: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 27

Sử dụng đối tượng (6)

Cài đặt 1 chương trình thử nghiệm

Tạo 1 tệp chứa một lớp mới

Phần chính của tên tệp phải trùng với tên lớp, phần mở rộng của tên tệp là .java

Đầu tệp, trước khi định nghĩa lớp phải khai báo các lớpcần sử dụng trong lớp này

Viết phương thức main (chương trình chính)

Tạo ra các đối tượng cần xử lí

Gọi các phương thức để xử lí các đối tượng

In ra kết quả

Page 28: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 28

Sử dụng đối tượng (7)

Khai báo các lớp cần sử dụng Thư viện các lớp trong Java được tổ chức thành

các gói (package)

Khi khai báo các lớp cần sử dụng phải chỉ ra tên gói và tên lớp import packageName.ClassName;

VD, lớp Rectangle nằm trong gói java.awt: import java.awt.Rectangle;

Thư viện ngầm định được sử dụng trong tất cả các tệp chương trình Java là gói java.lang, dùng các lớp trong gói này không cần khai báo (VD String, System)

Page 29: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 29

MoveTester.java

01: import java.awt.Rectangle; 02: 03: public class MoveTester 04: { 05: public static void main(String[] args) 06: { 07: Rectangle box = new Rectangle(5, 10, 20, 30); 08: 09: // Move the rectangle10: box.translate(15, 25); 11: 12: // Print information about the moved rectangle13: System.out.println("After moving, the top-left corner is:"); 14: System.out.println(box.getX()); 15: System.out.println(box.getY()); 16: } 17: }

After moving, the top-left corner is:2035

Page 30: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 30

Thử nghiệm trong môi trường tương tác BlueJ

Page 31: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 31

API Documentation

API: Application Programming Interface

Tài liệu tra cứu các thư viện chương trình - liệt kê các lớp và các phương thức

Khi lập trình:

Tra cứu API doc để biết cách sử dụng, thao tác với các đối tượng thuộc các lớp đã có sẵn

Tạo API doc cho các lớp của mình để có thể sử dụng lại

Thư viện Java chuẩn:

http://java.sun.com/j2se/1.5/docs/api/index.html

Có thể tải về trên máy

Page 32: Oop 2
Page 33: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 33

API doc của lớp Rectangle

Page 34: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 34

Danh sách các phương thức của lớp Rectangle

Page 35: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 35

Phương thức translate

Page 36: Oop 2

2009-2010 OOP - http://mim.hus.edu.vn/elearning 36

Phương thức tĩnh (static)

Ví dụ: Phương thức main

1 số phương thức trong lớp Math

Đặc điểm: Phương thức tĩnh không có tham biến ẩn

Lời gọi phương thức tĩnh ClassName. methodName(parameters) VD: Math.sqrt(4)

Nhận xét: câu lệnh java ClassName giống như lời gọi ClassName.main()