Bài giảng Lập trình hướng đối tượng: Bài 4 - Nguyễn Khanh Văn
lượt xem 1
download
Bài giảng "Lập trình hướng đối tượng - Bài 4: Các kỹ thuật xây dựng lớp và sử dụng đối tượng" cung cấp cho sinh viên các kiến thức: Chồng phương thức, thành viên ĐT và thành viên lớp, quản lý bộ nhớ trong Java, truyền tham số cho phương thức, một số lớp tiện ích trong Java. Mời các bạn cùng tham khảo.
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Bài giảng Lập trình hướng đối tượng: Bài 4 - Nguyễn Khanh Văn
- 8/24/2011 Mục tiêu bài học Nêu được bản chất, vai trò và biết sử dụng kỹ Bộ môn Công nghệ Phần mềm thuật chồng phương thức, chồng phương thức Viện CNTT & TT khởi tạo Trường Đại học Bách Khoa Hà Nội Thành viên đối tượng, thành viên lớp Hiểu về cách thức quản lý bộ nhớ và đối tượng LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG trong Java Bài 04. Các kỹ thuật xây dựng lớp Nắm về cách thức truyền tham số phương thức Biết cách sử dụng package, một số lớp tiện ích và sử dụng đối tượng trong Java: Wrapper class, Math, System, String vs. StringBuffer 2 Nội dung Nội dung 1. Chồng phương thức 1. Chồng phương thức 2. Thành viên ĐT và thành viên lớp 2. Thành viên ĐT và thành viên lớp 3. Quản lý bộ nhớ trong Java 3. Quản lý bộ nhớ trong Java 4. Truyền tham số cho phương thức 4. Truyền tham số cho phương thức 5. Một số lớp tiện ích trong Java 5. Một số lớp tiện ích trong Java 3 4 1.1. Chồng phương thức 1.1. Chồng phương thức (2) Chồng phương thức (Method Overloading) Ví dụ 1: Phương thức println() trong System.out.println() 5 6 1
- 8/24/2011 1.1. Chồng phương thức (3) Một số chú ý với chồng phương thức Ví dụ 2: 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 1.2. Chồng phương thức khởi tạo void prt(String s) { System.out.println(s); } Trong nhiều tình huống khác nhau cần khởi tạo đối tượng theo nhiều cách khác nhau 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)"); } Điều gì xảy ra nếu thực hiện: f2(5); char x=‘a’; f2(x); byte y=0; f2(y); float z = 0; f2(z); Điều gì xảy ra nếu gọi f2(5.5)? 9 10 Ví dụ 1.3. Từ khóa this 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); } } 11 12 2
- 8/24/2011 Ví dụ //(cont.) private double degreeToRadian(double degrees) { public class Ship { return(degrees * Math.PI / 180.0); private double x=0.0, y=0.0 } private double speed=1.0, direction=0.0; public void move() { public String name; move(1); public Ship(String name) { } this.name = name; public void move(int steps) { } double angle = degreesToRadians(direction); public Ship(String name, double x, double y) { x = x + (double)steps*speed*Math.cos(angle); this(name); this.x = x; this.y = y; y = y + (double)steps*speed*Math.sin(angle); } public Ship(String name, double x, double y, } double speed, double direction) { public void printLocation() { this(name, x, y); System.out.println(name + " is at (" this.speed = speed; + x + "," + y + ")."); this.direction = direction; } } 13 } //end of Ship class 14 //continue… Nội dung 2.1. Thành viên static 1. Chồng phương thức 2. Thành viên ĐT và thành viên lớp 3. Quản lý bộ nhớ trong Java 4. Truyền tham số cho phương thức 5. Một số lớp tiện ích trong Java 15 16 Ví dụ - sử dụng thuộc tính và phương Ví dụ lớp JOptionPane trong javax.swing thức static lớp JOptionPane Thuộc tính 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); Phương thức: 17 18 3
- 8/24/2011 Ví dụ - sử dụng thuộc tính và phương thức static lớp JOptionPane (2) 2.1. Thành viên static (2) Object[] options = { "OK", "CANCEL" }; Thay đổi giá trị của một thành viên static JOptionPane.showOptionDialog(null,“Nhan trong một đối tượng của lớp? OK de tiep tuc", "Canh bao", JOptionPane.DEFAULT_OPTION, JOptionPane.WARNING_MESSAGE,null,option s,options[0]); 19 20 Ví dụ 1 Ví dụ 2 class TestStatic{ public class Demo { public static int iStatic; public int iNonStatic; int i = 0; } void tang(){ i++; } public class TestS { public static void main(String[] args) { public static void main(String[] args) { TestStatic obj1 = new TestStatic(); tang(); obj1.iStatic = 10; obj1.iNonStatic = 11; System.out.println(obj1.iStatic+”,”+obj1.iNonStatic); System.out.println("Gia tri cua i la" + i); TestStatic obj2 = new TestStatic(); } System.out.println(obj2.iStatic+”,”+obj2.iNonStatic); obj2.iStatic = 12; } System.out.println(obj1.iStatic+”,”+obj1.iNonStatic); } } 21 22 2.2. Thành viên hằng Instance member vs. Class member Ví dụ: Thành viên đối tượng Thành viên lớp final double PI = 3.141592653589793; public final int VAL_THREE = 39; private final int[] A = { 1, 2, 3, 4, 5, 6 }; 23 24 4
- 8/24/2011 Nội dung 3. Quản lý bộ nhớ trong Java Java không sử dụng con trỏ 1. Chồng phương thức 2. Thành viên ĐT và thành viên lớp 3. Quản lý bộ nhớ trong Java 4. Truyền tham số cho phương thức 5. Một số lớp tiện ích trong Java 25 26 3.1. Bộ nhớ Heap 3.1. Bộ nhớ Heap String s = new String(“hello”); String s = new String(“hello”); String t = s; 27 28 3.2. Bộ nhớ Stack 3.3. Bộ thu gom rác (Garbage Collector) String s = new String(“hello”); Tiến trình chạy ngầm String t = s; int i = 201; int j = i; i 201 j 201 29 30 5
- 8/24/2011 Phương thức void finalize() 3.4. So sánh đối tượng Lớp nào cũng có phương thức finalize() Dữ liệu thường với toán tử ==? 31 32 3.4. So sánh đối tượng (2) 3.4. So sánh đối tượng (3) Đối với các đối tượng, toán tử == có ý nghĩa Bất kỳ đối tượng nào cũng có phương thức khác equals Ví dụ: Employee a = new Employee(1); Employee b = new Employee(1); if (a==b)... // false Employee a = new Employee(1); Employee b = a; if (a==b)... // true 33 34 Ví dụ == và equals – Lớp Integer Ví dụ 3 – equals của lớp tự viết public class Equivalence { class Value { public static void main(String[] args) { int i; } Integer n1 = new Integer(47); public class EqualsMethod2 { Integer n2 = new Integer(47); public static void main(String[] args) { System.out.println(n1 == n2); Value v1 = new Value(); System.out.println(n1.equals(n2)); Value v2 = new Value(); } v1.i = v2.i = 100; System.out.println(v1.equals(v2)); } } } 35 36 6
- 8/24/2011 Nội dung 4. Truyền tham số cho phương thức Có thể sử dụng bất kỳ kiểu dữ liệu nào cho 1. Chồng phương thức tham số của phương thức hoặc constructor 2. Thành viên ĐT và thành viên lớp 3. Quản lý bộ nhớ trong Java 4. Truyền tham số cho phương thức 5. Một số lớp tiện ích trong Java 37 38 4. Truyền tham số cho phương thức (2) 4.1. Với kiểu dữ liệu tham trị Java: pass-by-value Các giá trị nguyên thủy không thể thay đổi khi truyền như một tham số 39 40 4.2. Với kiểu dữ liệu tham chiếu 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); } } 41 42 7
- 8/24/2011 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(); } } 43 44 4.3. Truyền số lượng tham số tùy ý Nội dung Được gọi là varargs. 1. Chồng phương thức Ví dụ: System.out.printf ("%s: %d, %s\n", 2. Thành viên ĐT và thành viên lớp name, idnum, address); 3. Quản lý bộ nhớ trong Java Truyền tham số cho phương thức System.out.printf ("%s: %d, %s, %s, 4. %s\n", name, idnum, address, phone, 5. Một số lớp tiện ích trong Java email); 45 46 5.1. Package trong Java 5.1. Package trong Java (2) Package giống như thư mục Tên đầy đủ của lớp: 47 48 8
- 8/24/2011 a. Tham chiếu giữa các lớp a. Tham chiếu giữa các lớp (2) Ví dụ: Lệnh import: public class HelloNameDialog{ Sử dụng lệnh import để khai báo các package hoặc các public static void main(String[] args){ lớp để khi sử dụng không cần nêu tên đầy đủ. String result; result = javax.swing.JOptionPane .showInputDialog (“Hay nhap ten ban:”); javax.swing.JOptionPane.showMessageDialog(null, ”Xin chao “+ result + “!”); } } 49 50 b. Các package trong Java b. Các package trong Java (2) Các package cơ bản trong Java •java.applet •javax.rmi •java.awt •javax.security java.lang •java.beans •javax.sound •java.io •javax.sql •java.lang •javax.swing java.util •java.math •java.net •javax.transaction •javax.xml java.io •java.nio •org.ietf.jgss •java.rmi •org.omg.CORBA •java.security •org.omg.CosNaming •java.sql •org.omg.Dynamic •java.text •org.omg.IOP •java.util •org.omg.Messaging •javax.accessibility •org.omg.PortableInterceptor •javax.crypto •org.omg.PortableServer •javax.imageio •org.omg.SendingContext •javax.naming •org.omg.stub.java.rmi •javax.net •org.w3c.dom •javax.print •org.xml 51 52 b. Các package trong Java (3) 5.2. Các lớp bao (Wrapper class) Các package cơ bản trong Java Mỗi kiểu dữ liệu nguyên thủy có một lớp java.math tương ứng gọi là lớp bao: java.sql javax.swing 53 54 9
- 8/24/2011 5.2. Các lớp bao (2) a. Chuyển đổi kiểu dữ liệu Sử dụng toString() Sử dụng Value() Sử dụng parse() và valueOf() 55 56 a. Chuyển đổi kiểu dữ liệu (2) b. Các hằng số Boolean Float Boolean FALSE float MAX_VALUE Boolean TRUE float MIN_VALUE Byte float NaN byte MIN_VALUE float NEGATIVE_INFINITY byte MAX_VALUE float POSITIVE_INFINITY Character Integer int MAX_RADIX int MIN_VALUE char MAX_VALUE int MAX_VALUE int MIN_RADIX Long char MIN_VALUE long MIN_VALUE Unicode classification constants long MAX_VALUE Double Short double MAX_VALUE short MIN_VALUE double MIN_VALUE short MAX_VALUE double NaN double NEGATIVE_INFINITY double POSITIVE_INFINITY 57 58 Ví dụ 5.3. Xâu (String) double d = (new Integer(Integer.MAX_VALUE)). Kiểu String là một lớp và không phải là kiểu System.out.println(d); doubleValue(); dữ liệu nguyên thủy String input = "test 1-2-3"; int output = 0; for (int index=0;index
- 8/24/2011 a. Ghép xâu b. Các phương thức của xâu Toán tử + String name = "Joe Smith"; name.toLowerCase(); Các kiểu dữ liệu cơ bản sử dụng trong lời gọi name.toUpperCase(); println() được chuyển đổi tự động sang kiểu "Joe Smith ".trim(); "Joe Smith".indexOf('e'); String "Joe Smith".length(); "Joe Smith".charAt(5); "Joe Smith".substring(5); "Joe Smith".substring(2,5); 61 62 c. So sánh hai xâu c. So sánh hai xâu (2) oneString.equals(anotherString) String s1 = new String(“Hello”); s1 String s2 = s1; Hello s2 oneString.equalsIgnoreCase(anotherString) String s1 = new String(“Hello”); String s2 = new String(“Hello”); So sánh oneString == anotherString sẽ gây nhập nhằng s1 Hello s2 Hello 63 64 d. Điểm đặc biệt của String String Literal vs. String Object Khởi tạo String theo 2 cách: String s1 = "Hello"; Gán 1 giá trị literal String s2 = "Hello"; String s3 = s1; Dùng toán tử new (Không khuyến khích String s4 = new String("Hello"); dùng) String s5 = new String("Hello"); Ví dụ: String str1 = "Java is Hot"; String str2 = new String("I'm cool"); 65 66 11
- 8/24/2011 5.4. StringBuffer 5.4. StringBuffer (2) String là kiểu bất biến: StringBuffer là kiểu biến đổi: String s = new String(“hello”); String t = s; s = new String(“goodbye”); 67 68 5.4. StringBuffer (3) 5.4. StringBuffer (4) StringBuffer: Tính biến đổi Khi nào dùng? 69 70 5.4. StringBuffer (5) 5.5. Lớp Math java.lang.Math cung cấp các thành phần static: StringBuffer buffer = new StringBuffer(15); buffer.append("This is ") ; buffer.append("String") ; buffer.insert(7," a") ; buffer.append('.'); System.out.println(buffer.length()); System.out.println(buffer.capacity()); String output = buffer.toString() ; System.out.println(output); 71 72 12
- 8/24/2011 5.5. Lớp Math (2) 5.6. Lớp System Ví dụ : java.lang.System chứa nhiều hàm tiện ích hữu dụng Math.pow(Math.E, Math.sqrt(2.0*Math.PI)) Hoặc: Math.exp(Math.sqrt(2.0*Math.PI)) 73 5.6. Lớp System (2) 5.6. Lớp System (3) import java.util.Properties; currentTimeMillis(): public class PropertiesTest { exit(): public static void main(String[] args) { System.out.println( gc(): System.getProperty("path.separator")); System.out.println( Các phương thức liên quan đến thuộc tính của hệ System.getProperty("file.separator")); thống: System.out.println( System.getProperty("java.class.path")); System.out.println( System.getProperty("os.name")); System.out.println( System.getProperty("os.version")); System.out.println(System.getProperty("user.dir")); System.out.println(System.getProperty("user.home")); System.out.println(System.getProperty("user.name")); } } 13
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - TS. Trần Công Án
57 p | 89 | 13
-
Bài giảng Lập trình hướng đối tượng: Chương 2 - Nguyễn Sơn Hoàng Quốc, ThS. Nguyễn Tấn Trần Minh Khang
14 p | 174 | 12
-
Bài giảng Lập trình hướng đối tượng - Chương 1: Phương pháp lập trình hướng đối tượng
9 p | 140 | 9
-
Bài giảng Lập trình hướng đối tượng C++ - Chương 2: Lập trình hướng đối tượng
53 p | 46 | 8
-
Bài giảng Lập trình hướng đối tượng (dùng Java): Chương 1 - Trần Minh Thái (2017)
55 p | 80 | 8
-
Bài giảng Lập trình hướng đối tượng - Bài 1: Tổng quan lập trình hướng đối tượng
53 p | 119 | 8
-
Bài giảng Lập trình hướng đối tượng (Dùng C#): Chương 2 - Trần Minh Thái
35 p | 103 | 8
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Thị Anh Thi
7 p | 197 | 7
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - ThS. Trịnh Thành Trung
53 p | 86 | 7
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Trần Minh Thái
40 p | 116 | 6
-
Bài giảng Lập trình hướng đối tượng 1: Chương 1 - ThS. Thái Kim Phụng
39 p | 100 | 6
-
Bài giảng Lập trình hướng đối tượng – Bài 01: Tổng quan về OOP
47 p | 63 | 5
-
Bài giảng Lập trình hướng đối tượng (dùng JAVA): Chương 1 - Trần Minh Thái
40 p | 99 | 5
-
Bài giảng Lập trình hướng đối tượng và C++: Chương 1
15 p | 103 | 4
-
Bài giảng Lập trình hướng đối tượng: Nhập môn - Trần Phước Tuấn
15 p | 139 | 4
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Tổng quan về lập trình hướng đối tượng
47 p | 11 | 4
-
Bài giảng Lập trình hướng đối tượng: Chương 1 - Các khái niệm cơ bản trong lập trình hướng đối tượng
36 p | 15 | 3
-
Bài giảng Lập trình hướng đối tượng: Bài 1 - Nguyễn Khanh Văn
0 p | 83 | 2
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn