Bai 05 Các kĩ thuật xây dựng lớp và sử dụng đối tượng

20 12 0
Bai 05   Các kĩ thuật xây dựng lớp và sử dụng đối tượng

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Bai 05 Cac ky thuat xay dung lop va su dung DT 1 Bài 5 Các kỹ thuật xây dựng lớp và sử dụng đối tượng 1 1 Nội dung 1 Chồng phương thức 2 Thành viên ĐT và thành viên lớp 3 Truyền tham số cho phương thứ.

Nội dung Bài 5: Các kỹ thuật xây dựng lớp sử dụng đối tượng Chồng phương thức Thành viên ĐT thành viên lớp Truyền tham số cho phương thức Một số lớp tiện ích Java Ví dụ tập 1 2 Nội dung Nhắc lại phương thức v Mỗi phương thức phải có chữ ký riêng v Chữ ký phương thức bao gồm: Chồng phương thức Thành viên ĐT thành viên lớp Truyền tham số cho phương thức Một số lớp tiện ích Java Ví dụ tập § Tên phương thức § Số lượng đối số kiểu chúng 3 1.1 Chồng phương thức 1.1 Chồng phương thức (2) v Chồng phương thức (Method Overloading): Các phương thức lớp trùng tên chữ ký phải khác nhau: v Ví dụ 1: § Phương thức println() System.out.println() có 10 khai báo với tham số khác nhau: boolean, char[], char, double, float, int, long, Object, String, khơng có tham số § Khơng cần sử dụng tên khác (chẳng hạn "printString“ "printDouble“) cho kiểu liệu muốn hiển thị § Số lượng tham số khác § Nếu số lượng tham số kiểu liệu tham số phải khác v Mục đích: § Tên trùng để mơ tả chất cơng việc § Thuận Kện cho lập trình khơng cần phải nhớ q nhiều tên phương thức mà cần nhớ tên lựa chọn tham số cho phù hợp 5 6 1.1 Chồng phương thức (3) Một số ý với chồng phương thức v Ví dụ 2: v Các phương thức xem xét chồng chúng thuộc lớp v Chỉ nên sử dụng kỹ thuật với phương thức có mục đích, chức năng; tránh lạm dụng v Khi dịch, trình dịch vào số lượng kiểu liệu tham số để định gọi phương thức phù hợp Nếu không chọn chọn nhiều phương thức báo lỗi class MyDate { int year, month, day; public boolean setMonth(int m) { …} public boolean setMonth(String s) { …} } public class Test{ public static void main(String args[]){ MyDate d = new MyDate(); d.setMonth(9); d.setMonth(”September”); } } 7 8 Thảo luận Thảo luận v Cho phương thức sau đây: void prt(String s) { System.out.println(s); } void f1(char x) { prt("f1(char)"); } void f1(byte x) { prt("f1(byte)"); } public double test(String a, int b) v Hãy chọn phương thức chồng cho phương thức trên: void void void void void void test(String b, int a) public double test(String a) private int test(int b, String a) private int test(String a, int b) double test(double a, int b) double test(int b) public double test(String a, long b) f1(short x) { prt("f1(short)"); } f1(int x) { prt("f1(int)"); } f1(long x) { prt("f1(long)"); } f1(float x) { prt("f1(float)"); } f1(double x) { prt("f1(double)"); } v Điều xảy thực hiện: § § § § f1(5); char x=‘a’; f1(x); byte y=0; f1(y); float z = 0; f1(z);… int 9 10 10 Thảo luận Ví dụ class MyClass { public void myMethod(int a, long b) { } public void myMethod(long a, int b) { // overloading } } void prt(String s) { System.out.println(s); } void f2(short x) { prt("f3(short)"); } void f2(int x) { prt("f3(int)"); } void f2(long x) { prt("f5(long)"); } void f2(float x) { prt("f5(float)"); } v Điều xảy thực hiện: § § § § public class Test { public static void main(String args[]) { MyClass m = new MyClass(); m.myMethod(); // error khơng có method phù hợp m.myMethod(9, 10); // error có phiên method phù hợp } } f2(5); char x=‘a’; f2(x); byte y=0; f2(y); float z = 0; f2(z); v Điều xảy gọi f2(5.5)? Error: cannot find symbol: method f2(double) 11 11 12 12 1.2 Chồng phương thức khởi tạo Ví dụ v Trong nhiều tình khác cần khởi tạo đối tượng theo nhiều cách khác v Cần xây dựng phương thức khởi tạo khác cho đối tượng theo nguyên lý chồng phương thức (constructor overloading) public class BankAccount{ private String owner; private double balance; public BankAccount(){owner = “noname”;} public BankAccount(String o, double b){ owner = o; balance = b; } } public class Test{ public static void main(String args[]){ BankAccount acc1 = new BankAccount(); BankAccount acc2 = new BankAccount(“Thuy”, 100); } } 13 13 14 14 1.3 Từ khóa this Ví dụ v Nhắc lại: Tự tham chiếu đến đối tượng tại, sử dụng bên lớp tương ứng với đối tượng muốn tham chiếu v Sử dụng thuộc tính phương thức đối tượng thơng qua tốn tử “.”, ví dụ: public class Ship { private double x=0.0, y=0.0 private double speed=1.0, direction=0.0; public String name; public class BankAccount{ private String owner; public void setOwner(String owner){ this.owner = owner; } public BankAccount() { this.setOwner(“noname”); } … } public Ship(String name) { this.name = name; } public Ship(String name, double x, double y) { this(name); this.x = x; this.y = y; } public Ship(String name, double x, double y, double speed, double direction) { this(name, x, y); this.speed = speed; this.direction = direction; } //continue… v Gọi đến phương thức khởi tạo khác lớp: § this(danh_sach_tham_so); //neu co tham so 15 15 16 16 Nội dung //(cont.) private double degreeToRadian(double degrees) { return(degrees * Math.PI / 180.0); } public void move() { move(1); } public void move(int steps) { double angle = degreesToRadians(direction); x = x + (double)steps*speed*Math.cos(angle); y = y + (double)steps*speed*Math.sin(angle); } public void printLocation() { System.out.println(name + " is at (" + x + "," + y + ")."); } } //end of Ship class Chồng phương thức Thành viên ĐT thành viên lớp Truyền tham số cho phương thức Một số lớp Nện ích Java Ví dụ tập 17 17 19 19 2.1 Thành viên static Ví dụ lớp JOptionPane javax.swing v Trong Java v Thuộc tính § Các thành viên bình thường thành viên thuộc đối tượng § Thành viên thuộc lớp khai báo staKc v Cú pháp khai báo thành viên stawc: § chi_dinh_truy_cap static kieu_du_lieu tenBien; v Ví dụ: v Phương thức: 21 20 21 Ví dụ - sử dụng thuộc tính phương thức static lớp JOptionPane Ví dụ - sử dụng thuộc tính phương thức static lớp JOptionPane (2) v Object[] opwons = { "OK", "CANCEL" }; v JOpwonPane.showOpwonDialog(null,“Nhan OK de wep tuc", "Canh bao", JOpwonPane.DEFAULT_OPTION, JOpwonPane.WARNING_MESSAGE,null,opwons,op wons[0]); JOptionPane.showMessageDialog(null,"Ban da thao tac loi", "Thong bao loi", JOptionPane.ERROR_MESSAGE); JOptionPane.showConfirmDialog(null,"Ban co chac chan muon thoat?", "Hay lua chon", JOptionPane.YES_NO_OPTION); 23 22 22 23 Ví dụ 2.1 Thành viên static (2) v Thay đổi giá trị thành viên static đối tượng lớp thay đổi giá trị thành viên tất đối tượng khác lớp v Các phương thức static truy cập vào thuộc tính static gọi phương thức static lớp class TestStatic{ public static int iStatic; public int iNonStatic; } public class TestS { public static void main(String[] args) { TestStatic obj1 = new TestStatic(); obj1.iStatic = 10; obj1.iNonStatic = 11; System.out.println(obj1.iStatic + ”,” + obj1.iNonStatic); TestStatic obj2 = new TestStatic(); System.out.println(obj2.iStatic + ”,” + obj2.iNonStatic); } } 24 24 obj2.iStatic = 12; System.out.println(obj1.iStatic + ”,” + obj1.iNonStatic); 25 25 Ví dụ 2.2 Thành viên public class Demo { int i = 0; void tang(){ i++; } v Một thuộc tính/phương thức khơng thể thay đổi giá trị/nội dung trình sử dụng v Cú pháp khai báo: public static void main(String[] args) { tang(); chi_dinh_truy_cap final kieu_du_lieu TEN_HANG = gia_tri; v Ví dụ: System.out.println("Gia tri cua i la" + i); final double PI = 3.141592653589793; public final int VAL_THREE = 39; private final int[] A = { 1, 2, 3, 4, 5, }; } } non-staKc method tang() cannot be referenced from a staKc contex non-staKc variable i cannot be referenced from a staKc context 26 26 27 27 2.2 Thành viên (2) Instance member vs Class member v Thông thường số liên quan đến lớp khai báo static final nhằm giúp truy cập dễ dàng Thành viên đối tượng v Thuộc tính/phương v Thuộc •nh/phương thức truy thức truy cập cập thông qua lớp thơng qua đối tượng v Các đối tượng có v Mỗi đối tượng có chung sao riêng 1 thuộc tính lớp thuộc 6nh đối tượng v Giá trị thuộc v Giá trị thuộc tính lớp đối •nh đối tượng tượng khác đối tượng khác giống khác 28 28 Thành viên lớp 29 29 Nội dung Truyền tham số cho phương thức v Có thể sử dụng kiểu liệu cho tham số phương thức constructor § Kiểu liệu nguyên thủy § Kiểu liệu tham chiếu: mảng đối tượng Chồng phương thức Thành viên ĐT thành viên lớp Truyền tham số cho phương thức Một số lớp tiện ích Java Ví dụ tập v Ví dụ public Polygon polygonFrom(Point[] corners) { // method body goes here } 30 30 31 31 Truyền tham số cho phương thức (2) 3.1 Với kiểu liệu tham trị v Java truyền tham số cho phương thức dạng giá trị (pass-by-value): Truyền giá trị/bản tham số thực v Các giá trị nguyên thủy thay đổi truyền tham số v Phương thức swap có hoạt động khơng? § Với tham số có kiểu liệu tham trị (kiểu liệu nguyên thủy): Truyền giá trị/bản biến nguyên thủy truyền vào public void swap(int var1, int var2) { int temp = var1; var1 = var2; var2 = temp; } § Với tham số có kiểu liệu tham chiếu (mảng đối tượng): Truyền giá trị/bản tham chiếu gốc truyền vào Thay đổi tham số hình thức không làm ảnh hưởng đến tham số thực 32 32 33 33 3.2 Với kiểu liệu tham chiếu 3.2 Với kiểu liệu tham chiếu-ví dụ v Thực truyền tham chiếu gốc, truyền tham chiếu gốc truyền đối tượng (pass the references by value, not the original reference or the object) public class Student { private int year; private String name; public Student(String name, int year) { this.year = year; this.name = name; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } v Sau truyền cho phương thức, đối tượng có tham chiếu } 35 34 34 35 3.2 Với kiểu liệu tham chiếu-ví dụ 4.2 Với kiểu liệu tham chiếu-ví dụ public class Test { public class Test { public static void change(Student std){ public static void change(Student std){ std.setYear(2000); std = new Student("Hung", 1995); } public static void main(String[] args) { Student std = new Student("Nam", 1990); System.out.println(std.getYear()); change(std); System.out.println(std.getYear()); } } public static void main(String[] args) { Student std = new Student("Nam", 1990); System.out.println(std.getYear()); change(std); System.out.println(std.getYear()); } } } 36 36 37 37 Ví dụ public class Point { private double x; private double y; public Point() { } public Point(double x, double y) { this.x = x; this.y = y; } public void setX(double x) { this.x = x; } public void setY(double y) { this.y = y; } public void printPoint() { System.out.println("X: " + x + " Y: " + y); } } public class Test { public static void tricky(Point arg1, Point arg2) { arg1.setX(100); arg1.setY(100); Point temp = arg1; arg1 = arg2; arg2 = temp; } public static void main(String [] args) { Point pnt1 = new Point(0,0); Point pnt2 = new Point(0,0); pnt1.printPoint(); pnt2.printPoint(); System.out.println(); tricky(pnt1, pnt2); pnt1.printPoint(); pnt2.printPoint(); } } 38 38 39 39 3.3 Truyền số lượng tham số tùy ý v Được gọi varargs Cú pháp: v Chỉ có tham chiếu phương thức tráo đổi, khơng phải tham chiếu gốc § ten_phuong_thuc(Kieu_dl ten_tham_so) v Ví dụ 1: § Khai báo: public PrintStream printf(String format, Object args) Đ S dng ã System.out.printf ("%s: %d, %s\n", name, idnum, address); • System.out.printf ("%s: %d, %s, %s, %s\n", name, idnum, address, phone, email); 40 40 41 41 10 Bài tập: Tính tổng số lượng số nguyên v Ví dụ public Polygon polygonFrom(Point corners) { int numberOfSides = corners.length; double squareOfSide1, lengthOfSide1; squareOfSide1 = (corners[1].x - corners[0].x) *(corners[1].x - corners[0].x) + (corners[1].y - corners[0].y) *(corners[1].y - corners[0].y) ; lengthOfSide1 = Math.sqrt(squareOfSide1); //create & return a polygon connecting the Points } public class Test { public static int plus(int arr) { int result = 0; for (int i : arr) { result += i; } return result; } v Nhận xét public static void main(String[] args) { System.out.println(plus(1, 2, 3, 4, 5)); } § corners coi mảng § Phương thức gọi cách truyền mảng loạt tham số truyền vào } 43 42 42 43 Nội dung 4.1 Package Java v Package giống thư mục giúp: § Tổ chức xác định vị trí lớp dễ dàng sử dụng lớp cách phù hợp § Tránh cho việc đặt tên lớp bị xung đột (trùng tên) Chồng phương thức Thành viên ĐT thành viên lớp Truyền tham số cho phương thức Một số lớp Eện ích Java Ví dụ tập • Các package khác chứa lớp có tên § Bảo vệ lớp, liệu phương thức mức rộng so với mối quan hệ lớp v Một package chứa package khác 44 44 45 45 11 4.1 Package Java (2) a Tham chiếu lớp v Tên đầy đủ lớp bao gồm tên gói tên lớp: v Trong package: Sử dụng tên lớp v Khác package: Phải cung cấp tên đầy đủ cho lớp định nghĩa package khác v Ví dụ: public class HelloNameDialog { public static void main(String[] args){ String result; result = javax.swing.JOptionPane showInputDialog("Hay nhap ten ban:"); javax.swing.JOptionPane.showMessageDialog (null, "Xin chao "+ result + "!"); } } 46 46 47 47 a Tham chiếu lớp (2) b Các package Java v Lệnh import: •java.applet •java.awt •java.beans •java.io •java.lang •java.math •java.net •java.nio •java.rmi •java.security •java.sql •java.text •java.util •javax.accessibility •javax.crypto •javax.imageio •javax.naming •javax.net •javax.print § Sử dụng lệnh import để khai báo package lớp để sử dụng không cần nêu tên đầy đủ § Ví dụ: import javax.swing.JOptionPane; public class HelloNameDialog { public static void main(String[] args){ String result; result = JOptionPane.showInputDialog("Hay nhap ten ban:"); JOptionPane.showMessageDialog (null, "Xin chao "+ result + "!"); } } 48 48 •javax.rmi •javax.security •javax.sound •javax.sql •javax.swing •javax.transaction •javax.xml •org.ietf.jgss •org.omg.CORBA •org.omg.CosNaming •org.omg.Dynamic •org.omg.IOP •org.omg.Messaging •org.omg.PortableInterceptor •org.omg.PortableServer •org.omg.SendingContext •org.omg.stub.java.rmi •org.w3c.dom •org.xml 49 49 12 b Các package Java (2) b Các package Java (3) v Các package Java v Các package Java § java.lang § java.math • Cung cấp lớp cho thiết kế ngơn ngữ lập trình Java • Bao gồm wrapper classes, String StringBuffer, Object, • Import ngầm định vào tất lớp • Cung cấp lớp thực thi phép toán với số nguyên phộp toỏn thp phõn Đ java.sql ã Cung cp cỏc API cho phép truy nhập xử lý liệu lưu trữ nguồn liệu (thường sử dng c s d liu quan h) Đ java.util ã Bao gồm tập hợp framework, mơ hình kiện, date time, nhiều tiện ích khác § javax.swing § java.io • Cung cấp lớp giao diện cho phép tạo ứng dụng đồ họa • Cung cấp khả vào/ra hệ thống với luồng liệu hệ thống file § … 50 50 51 51 4.2 Các lớp bao (Wrapper class) 4.2 Các lớp bao (2) v Các kiểu liệu ngun thủy khơng có phương thức liên quan đến v Mỗi kiểu liệu nguyên thủy có lớp tương ứng gọi lớp bao: § Các lớp bao “gói” liệu nguyên thủy cung cấp phương thức thích hợp cho liệu § Mỗi đối tượng lớp bao đơn giản lưu trữ biến đơn đưa phương thức để xử lý § Các lớp bao phần Java API 52 52 53 53 13 a Chuyển đổi kiểu liệu a Chuyển đổi kiểu liệu (2) v Sử dụng toString() để chuyển giá trị số thành xâu v Sử dụng Value() để chuyển từ đối tượng lớp bao thành giá trị nguyên thủy đối tượng tương ứng Float objF = new Float(“4.67”); float f = objF.floatValue(); // f=4.67F int i = objF.intValue(); //i=4 v Sử dụng parse() valueOf() để chuyển xâu thành giá trị số int i = Integer.parseInt(“123”); double //i=123 d = Double.parseDouble(“1.5”) ; // d=1.5 Double objF2 = Double.valueOf(“-36.12”); long l = objF2.longValue(); // l=-36L 54 54 55 55 b Các số v Boolean § § v Boolean FALSE Boolean TRUE int MAX_RADIX char MAX_VALUE int MIN_RADIX char MIN_VALUE Unicode classificaBon constants v § § § § § double MAX_VALUE double MIN_VALUE double NaN double NEGATIVE_INFINITY double POSITIVE_INFINITY v String input = "test 1-2-3"; int output = 0; for (int index=0;index

Ngày đăng: 17/11/2022, 09:01

Tài liệu cùng người dùng

Tài liệu liên quan