Lập trình Java cơ bản
Cao Đức Thông Trần Minh Tuấn
[email protected],
[email protected]
1
Bài 2. OOP trong Java
• Các phương pháp lập trình
• Giới thiệu về OOP
• Kế thừa (Inheritance)
• Đa hình (Polymorphism)
• Giao tiếp (Interface)
• Lớp trừu tượng (Abstract)
• Gói (Packages)
• Java vs C++
• Bài tập
2
Các phương pháp lập trình
• StepbyStep Programming
• Lập trình từng bước
• Machine Language, Assembly Language
1101011100111101 MOV BX, CS
1010000111011101 SUB BX, 10h
0110111011001010 JNE label1
1000100100101011 LOOP label2
... ...
3
Các phương pháp lập trình
• Procedural Programming
• Thiết kế topdown. Chương Program
trình được chia thành các
hàm, thủ tục.
• Pascal, C Proc1
Proc3
• Hạn chế: dùng dữ liệu toàn
cục, khó phát triển, khó mô tả
các thực thể trong thực tế Proc2
4
Các phương pháp lập trình
• ObjectOriented
Programming Object A
• Chương trình bao gồm các
đối tượng. Các đối tượng
tương tác với nhau thông
qua các phương thức của Object B
Object C
chúng
• Dễ mô tả các thực thể
Object D
• Dễ phát triển, mở rộng
chương trình
5
Lập trình hướng đối tượngOOP
• Lớp và đối tượng
• Dữ liệu và các thao tác trên dữ liệu được kết hợp
trong cùng một đối tượng (object)
• Lớp (class) định nghĩa các tính chất của một tập
hợp các đối tượng cùng kiểu
• Đối tượng là các thể hiện (instances) của lớp
• Đặc điểm của OOP
• Tính đóng gói (Encapsulation)
• Tính kế thừa (Inheritance)
• Tính đa hình (Polymorphism)
6
Ví dụ về OOP trong Java
• Lớp Time và TimeTest nằm trong cùng thư mục
• Lớp Time nằm trong file Time.java. Nó chứa các
định nghĩa về thời gian.
• Lớp TimeTest nằm trong file TimeTest.java. Nó
dùng để kiểm tra lớp Time. Lớp TimeTest chứa
hàm main.
• Khi chạy chỉ cần gõ:
• javac TimeTest.java
• java TimeTest
• Java sẽ tự động tìm và dịch file Time.java
7
Lớp Time
// File Time.java
import java.text.DecimalFormat;
public class Time
{
private int hour; // 0 23
private int minute; // 0 59
private int second; // 0 59
// Cau tu
public Time() { setTime( 0, 0, 0 ); }
// Ham thiet lap du lieu
public void setTime( int h, int m, int s )
{
hour = ( ( h >= 0 && h = 0 && m = 0 && s Lớp Time
// Chuyen sang khuon dang thoi gian quoc te
public String toUniversalString()
{
DecimalFormat twoDigits = new DecimalFormat( "00" );
return twoDigits.format( hour ) + ":" +
twoDigits.format( minute ) + ":" + twoDigits.format( second );
}
// Chuyen sang khuon dang thoi gian thong thuong
public String toStandardString()
{
DecimalFormat twoDigits = new DecimalFormat( "00" );
return ( (hour == 12 || hour == 0) ? 12 : hour % 12 ) + ":" +
twoDigits.format( minute ) + ":" + twoDigits.format( second ) + ( hour Lớp Time
• Dữ liệu
• Mỗi dữ liệu phải có một phạm vi nhất định
• Phương thức
• Cấu tử có tên trùng với tên lớp
• Cấu tử không có kiểu trả về
• Có thể có nhiều cấu tử (overloading)
• Mỗi phương thức phải có một phạm vi nhất định
10
Lớp TimeTest
// File TimeTest.java
import javax.swing.JOptionPane;
public class TimeTest
{
public static void main( String args[ ] )
{
Time time = new Time(); // Tao mot doi tuong kieu Time
// Lay thoi gian
String output = "The initial universal time is: "
+ time.toUniversalString()
+ "\nThe initial standard time is: “
+ time.toStandardString();
// Dat lai thoi gian
time.setTime( 13, 27, 6 );
output += "\n\nUniversal time after setTime is: "
+ time.toUniversalString()
+ "\nStandard time after setTime is: "
+ time.toStandardString();
11
Lớp TimeTest
// Dat lai thoi gian
time.setTime( 99, 99, 99 );
output += "\n\nAfter attempting invalid settings: "
+ "\nUniversal time: " + time.toUniversalString()
+ "\nStandard time: " + time.toStandardString();
JOptionPane.showMessageDialog( null, output,
"Testing Class Time1", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 );
} // Ket thuc ham main
} // Ket thuc lop TimeTest
12
Chạy TimeTest
• javac TimeTest.java
• java TimeTest
13
Phạm vi truy cập
• private
• Chỉ truy cập được từ trong lớp khai báo.
• protected
• Truy cập được từ trong lớp khai báo, lớp con của
của lớp khai báo và các lớp cùng gói với lớp
khai báo.
• public
• Truy cập được từ mọi nơi.
• Mặc định
• Truy cập được từ trong lớp khai báo và các lớp
cùng gói với lớp khai báo.
14
Từ khoá this
• Từ khoá this chỉ đối tượng hiện thời
public class Time
{
private int hour; // 0 23
private int minute; // 0 59
private int second; // 0 59
// Viet lai ham setTime
public void setTime( int hour, int minute, int second )
{
this.hour = ( ( hour >= 0 && hour = 0 && minute = 0 && second Nạp chồng hàm khởi tạo
// Ham khoi tao khong tham so
public Time() { this( 0, 0, 0 ); }
// Ham khoi tao mot tham so
public Time( int h ) { this( h, 0, 0 ); }
// Ham khoi tao hai tham so
public Time( int h, int m ) { this( h, m, 0 ); }
// Ham khoi tao ba tham so
public Time( int h, int m, int s ) { setTime( h, m, s ); }
// Ham sao chep
public Time( Time time )
{ this( time.hour, time.minute, time.second ); }
// Su dung cac cau tu
Time t1 = new Time(); // 00:00:00
Time t2 = new Time( 2 ); // 02:00:00
Time t3 = new Time( 21, 34 ); // 21:34:00
Time t4 = new Time( 12, 25, 42 ); // 12:25:42
Time t5 = new Time( 27, 74, 99 ); // 00:00:00
Time t6 = new Time( t4 ); // 12:25:42 16
Một số từ khoá
• Từ khoá final
• Áp dụng cho lớp, phương thức, biến.
• Lớp final: là lớp không thể có lớp con
public final class NoChild {...}
• Biến final: là biến không thể thay đổi khi đã gán
giá trị
private final int MAX = 100;
• Phương thức final: là phương thức không thể
nạp chồng
public final void NoOverride();
17
Một số từ khoá
• Từ khoá static
• Được dùng với phương thức và biến.
• Biến static: là biến chung cho mọi đối tượng của
lớp, nó được truy cập qua đối tượng của lớp hoặc
qua tên lớp.
private static char TAB = ‘\t’;
• Phương thức static: là phương thức chỉ được
phép truy cập tới các biến static của lớp, nó có
thể gọi ngay cả khi chưa có đối tượng nào của
lớp.
• public static void Welcome() {...}
18
Kế thừa (Inheritance)
• Kế thừa là việc xây dựng lớp mới dựa trên lớp đã
có sẵn
• Lớp đã có sẵn là lớp cha: superclass
• Lớp mới là lớp con: subclass
• Ví dụ:
• Hình vuông kế thừa từ hình chữ nhật
• Con ếch kế thừa từ loài động vật dưới nước
• Chú ý:
• Tính kế thừa thể hiện quan hệ “is a”, khác với quan hệ
“has a” (composition)
• Composition: một đối tượng chứa các đối tượng thuộc lớp
khác. Ví dụ: ôtô có các bánh xe
19
Cây kế thừa
Animal
TerrestrialAnimal AquaticAnimal
Cat Horse Chicken Fish Octopus
20