1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài Liệu Lập Trình Hướng Đối Tượng Full

102 222 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 102
Dung lượng 10,72 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Đây là tài liệu lập trình hướng đối tượng dành cho những bạn học sinh, sinh viên và những người đam mê lập trình. Chúng tôi đã tổng hợp toàn bộ kỹ thuật lập trình từ căn bản đến nâng cao, bao gồm 12 bài trong đó.

Trang 1

Bộ môn Công nghệ Phần mềm

Viện CNTT & TT Trường Đại học Bách Khoa Hà Nội

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài 01 Tổng quan về OOP

Nội dung

1 Lập trình hướng đối tượng

2 Công nghệ hướng đối tượng

3 Ngôn ngữ lập trình Java

4 Ví dụ và bài tập

2

Nội dung

2 Công nghệ hướng đối tượng

Trang 2

Đối tượng phần mềm Đối tượng phần mềm Xe Đạp

Mô hình hóa đối tượng

Trang 3

Gọi hàm vs Gửi thông điệp

 Gọi hàm (Call function)

 Gửi thông điệp

1 Lập trình hướng đối tượng

Trang 5

c Mô đun hóa (Modularity)

Gia tăng mức độ trừu tượng hóa

Tài sản

Bất động sản

Tiết kiệm Tài khoản ngân hàng

Tiên gửi Cổ phiếu Chứng khoán

Các loại giấy tờ có giá trị

Nội dung

1 Lập trình hướng đối tượng

2 Công nghệ hướng đối tượng

 Ngày nay, nhắc đến Java, không còn nhắc

đến như một ngôn ngữ mà còn là một công

Trang 6

Lịch sử phát triển của J2SE

3.3 Mô hình dịch của Java

 a Mô hình biên dịch truyền thống:

34

3.3 Mô hình dịch của Java (2)

 b Mô hình dịch của Java:

35

3.3 Mô hình dịch của Java (3)

 Máy ảo Java (Java Virtual Machine):

 Máy ảo Java là trái tim của ngôn ngữ Java

36

Trang 7

3.4 Các tính năng của Java

 Java được thiết kế:

Ngôn ngữ lập trình mạnh, đầy đủ tính năng và

thuần hướng đối tượng.

3.4 Các tính năng của Java (5)

 Đa luồng (Multi-threaded)

 Khả chuyển (Portable)

42

Trang 8

3.4 Các tính năng của Java (6)

 Các môi trường phát triển

Java Development Kit

Integrated Development Environments (IDEs):

3.5 Các kiểu chương trình Java (2)

 Ứng dụng Web (Web application)

45

Nội dung

1 Lập trình hướng đối tượng

2 Công nghệ hướng đối tượng

// Chuong trinh hien thi dong chu “Hello World”

public class HelloWorld {

/* Phuong thuc main se duoc goi dau tien

trong bat cu ung dung Java nao*/

public static void main(String args[]){

System.out.println( “Hello World!" );

} // ket thuc phuong thuc main

} // ket thuc lop HelloWorld

47

Ví dụ 1 (tiếp)

 Chú thích (Comment)

 Java phân biệt chữ hoa chữ thường

 Từ khóa có sẵn của Java:

class: Khai báo lớp

public: Quy định phạm vi truy cập

 Tên lớp chứa hàm main phải trùng với tên file java.

48

Trang 9

Cài đặt và chạy thử chương trình Java

 Bước 1: Cài đặt j2sdk1.5/6/7, cài đặt các biến môi trường

 JCreator: F7 hoặc Build  Build Project/File

 Bước 5: Chạy chương trình

 cmd: java HelloWorld.class

 Textpad: Ctrl + 2

 JCreator: F5 hoặc Run  Run Project/File

49

Biến môi trường

 PATH = …;C:\Program Files\Java\jdk1.6\bin

 CLASSPATH = C:\Program Files\Java\jdk1.6\lib;.;C:\Program Files\Java\jdk1.6\include

50

51

Ví dụ 2 - GUI

import javax.swing.JOptionPane;

public class FirstDialog{

public static void main(String[] args){

JOptionPane.showMessageDialog(null,

”Xin chao ban!”);

System.exit(0);

} }

52

Ví dụ 3 – Nhập, xuất dữ liệu

import javax.swing.JOptionPane;

public class HelloNameDialog{

public static void main(String[] args){

Trang 10

Bộ môn Công nghệ Phần mềm Viện CNTT & TT Trường Đại học Bách Khoa Hà Nội

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài 02 Cú pháp Java cơ bản

Mục tiêu bài học

trình Java, tạo ra các định danh hợp lệ

 Mô tả các kiểu dữ liệu cơ bản trong Java và cách sử dụng

 Các toán tử

 Giải thích về phạm vi của biến

 Sử dụng các câu lệnh điều khiển, cấu trúc điều kiện, cấu trúc lặp và rẽ nhánh

 Khai báo, khởi tạo các biến và mảng trong Java

Trang 13

2.4 Khai báo và khởi tạo biến

Các biến đơn (biến không phải là mảng) cần

phải được khởi tạo trước khi sử dụng trong

Trang 14

3 Toán tử (Operators)

Java cung cấp nhiều dạng

toán tử

25

Thứ tự ưu tiên của toán tử

Cho biết toán tử nào thực hiện trước – được xác định bởi các dấu ngoặc đơn hoặc theo ngầm định

default action(s)

[true]

case b action(s) break

case z action(s) break

[false ]

Trang 15

}

int x = 2;

do { x++;

public static void main(String args[]) {

int i=1, sum=0;

for (i=1;i<=10;i+=2) sum+=i;

System.out.println (“Sum of first five

old numbers is “ + sum);

} }

Trang 16

4.5 Các lệnh thay đổi cấu trúc điều khiển (2)

5.1 Khai báo và khởi tạo mảng

Khai báo, khởi tạo giá trị ban đầu:

Nếu không khởi tạo  nhận giá trị mặc định

42

Trang 17

-45 6 0 72 1543 -89 0 62 -3 1 6453 78

boolean bit[] = new boolean[MAX];

float[] value = new float[2*3];

b[ 2 ][ 0 ] b[ 2 ][ 1 ] b[ 2 ][ 2 ] b[ 2 ][ 3 ]

Trang 18

Bộ môn Công nghệ Phần mềm Viện CNTT & TT Trường Đại học Bách Khoa Hà Nội

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài 03 Đóng gói và xây dựng lớp,

tạo và sử dụng đối tượng

Mục tiêu bài học

 Nêu được bản chất, vai trò của trừu tượng hóa

 Giải thích về đóng gói và che giấu thông tin

Định nghĩa lớp, thực hiện ẩn

Tạo các phương thức, các trường/thuộc tính

 Tạo và sử dụng đối tượng

Phương thức khởi tạo

Khai báo và khởi tạo đối tượng

1.1 Trừu tượng hóa

2 loại trừu tượng hóa

1.1 Trừu tượng hóa (2)

Trừu tượng hóa điều khiển

Trừu tượng hóa dữ liệu

Trang 19

1.2 Trừu tượng hóa dữ liệu trong OOP

Đối tượng trong thực tế phức tạp

1.2 Trừu tượng hóa dữ liệu (3)

Any model that includes the most important,

essential, or distinguishing aspects of

something while suppressing or ignoring less

important, immaterial, or diversionary details.

The result of removing distinctions so as to

emphasize commonalties (Dictionary of

Object Technology, Firesmith, Eykholt,

1995).

9

1.2 Trừu tượng hóa dữ liệu (2)

 Tập hợp các thể hiện của các thực thể thành các nhóm

có chung các thuộc tính

10

Trang 21

2.1 Đóng gói (3)

21

Don’t know how

it works, but it works!

Trang 22

private String name;

public String getName() { return this.name;

} public void setName(String name) {

this.name = name;

} }

28

Ví dụ: private (2)

class Student{

private String name;

public String getName() {

students[0] = new Students();

//student.name = “Hung”; error

Trang 23

public final int VAL_THREE = 39;

private final int[] A = { 1, 2, 3, 4, 5, 6 };

Trang 24

package com.megabank.models;

public class BankAccount {

private String owner;

private double balance;

public boolean debit(double amount){

Cơ chế che giấu dữ liệu (2)

Accessor (getter):

Mutator (setter):

Trang 26

3.2 Phương thức khởi tạo (4)

Phương khởi tạo mặc định (default

constructor)

49

3.3 Khai báo và khởi tạo đối tượng

Đối tượng được tạo ra, thể hiện hóa (instantiate) từ một mẫu chung (lớp).

50

3.3 Khai báo và khởi tạo đối tượng (2)

Đối tượng cần được khởi tạo trước khi sử

Department dept[] = new Department[100];

Test[] t = {new Test(1),new Test(2)};

54

Trang 27

Ví dụ 1

class BankAccount{

private String owner;

private double balance;

}

public class Test{

public static void main(String args[]){

BankAccount acc1 = new BankAccount();

}

}

55

Ví dụ 2

public class BackAccount{

private String owner;

private double balance;

public BankAccount(){

owner = ”noname”;

} } public class Test{

public static void main(String args[]){

BankAccount acc1 = new BankAccount();

} }

56

Ví dụ 3

public class BankAccount {

private String owner;

private double balance;

public BankAccount(String name){

public class Test{

public static void main(String args[]){

BankAccount account1 = new BankAccount();

BankAccount account2 = new BankAccount(“Hoang”);

public class BankAccount{

private String owner;

private double balance;

public BankAccount(String name) { setOwner(name);

} public void setOwner(String o){ owner = o; } public String getOwner(){ return owner; } }

public class Test{

public static void main(String args[]){

BankAccount acc1 = new BankAccount(“”);

BankAccount acc2 = new BankAccount(“Hong”);

Trang 28

Tự tham chiếu – this

Cho phép truy cập vào đối tượng hiện tại của

lớp.

61

public class BankAccount{

private String owner;

private double balance;

public BankAccount() { } public void setOwner(String owner){

this.owner = owner;

} public String getOwner(){ return owner; } }

public class Test{

public static void main(String args[]){

BankAccount acc1 = new BankAccount();

BankAccount acc2 = new BankAccount();

Trang 29

Bộ môn Công nghệ Phần mềm Viện CNTT & TT Trường Đại học Bách Khoa Hà Nội

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài 04 Các kỹ thuật xây dựng lớp

và sử dụng đối tượng

Mục tiêu bài học

 Nêu được bản chất, vai trò và biết sử dụng kỹ thuật chồng phương thức, chồng phương thức khởi tạo

 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 trong Java

 Biết cách sử dụng package, một số lớp tiện ích trong Java: Wrapper class, Math, System, String

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

3

Nội dung

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

Trang 30

1.1 Chồng phương thức (3)

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();

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)"); }

Điều gì xảy ra nếu thực hiện:

1.2 Chồng phương thức khởi tạo

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

10

Ví dụ

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();

Trang 31

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 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) {

} 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 ("

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

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);

18

Trang 32

Thay đổi giá trị của một thành viên static

trong một đối tượng của lớp?

20

Ví dụ 1

class TestStatic{

public static int iStatic;

public int iNonStatic;

}

public class TestS {

public static void main(String[] args) {

TestStatic obj1 = new TestStatic();

System.out.println("Gia tri cua i la" + i);

} }

22

2.2 Thành viên hằng

Ví dụ:

final double PI = 3.141592653589793;

public final int VAL_THREE = 39;

private final int[] A = { 1, 2, 3, 4, 5, 6 };

23

Instance member vs Class member

24

Trang 33

Nội dung

1 Chồng phương thức

2 Thành viên ĐT và thành viên lớp

4 Truyền tham số cho phương thức

5 Một số lớp tiện ích trong Java

25

3 Quản lý bộ nhớ trong Java

Java không sử dụng con trỏ

Trang 34

Phương thức void finalize()

Lớp nào cũng có phương thức finalize()

Employee a = new Employee(1);

Employee b = new Employee(1);

public class Equivalence {

public static void main(String[] args) {

Integer n1 = new Integer(47);

Integer n2 = new Integer(47);

} public class EqualsMethod2 { public static void main(String[] args) { Value v1 = new Value();

Value v2 = new Value();

v1.i = v2.i = 100;

System.out.println(v1.equals(v2));

} }

36

Trang 35

Nội dung

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

thức

5 Một số lớp tiện ích trong Java

37

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 tham số của phương thức hoặc constructor

38

4 Truyền tham số cho phương thức (2)

Java: pass-by-value

39

4.1 Với kiểu dữ liệu tham trị

Các giá trị nguyên thủy không thể thay đổi khi truyền như một tham số

} 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);

} }

42

Trang 36

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);

4.3 Truyền số lượng tham số tùy ý

Được gọi là varargs.

3 Quản lý bộ nhớ trong Java

4 Truyền tham số cho phương thức

46

5.1 Package trong Java

Package giống như thư mục

47

5.1 Package trong Java (2)

Tên đầy đủ của lớp:

48

Trang 37

a Tham chiếu giữa các lớp

Ví dụ:

public class HelloNameDialog{

public static void main(String[] args){

b Các package trong Java (2)

Các package cơ bản trong Java

java.util

java.io

52

b Các package trong Java (3)

Các package cơ bản trong Java

java.sql

53

5.2 Các lớp bao (Wrapper class)

Mỗi kiểu dữ liệu nguyên thủy có một lớp tương ứng gọi là lớp bao:

54

Trang 38

Kiểu String là một lớp và không phải là kiểu

dữ liệu nguyên thủy

60

Trang 39

a Ghép xâu

Toán tử +

Các kiểu dữ liệu cơ bản sử dụng trong lời gọi

println() được chuyển đổi tự động sang kiểu

String s1 = new String(“Hello”);

String s2 = new String(“Hello”);

64

Hello s1

s2

Hello s1

s2

Hello

d Điểm đặc biệt của String

Khởi tạo String theo 2 cách:

Gán 1 giá trị literal

Dùng toán tử new (Không khuyến khích

dùng)

Ví dụ:

String str1 = "Java is Hot";

String str2 = new String("I'm cool");

String s4 = new String("Hello");

String s5 = new String("Hello");

66

Trang 40

5.4 StringBuffer

String là kiểu bất biến:

StringBuffer là kiểu biến đổi:

72

Trang 42

Bộ môn Công nghệ Phần mềm Viện CNTT & TT Trường Đại học Bách Khoa Hà Nội

LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG

Bài 4B Nested Class

class NestedClass {

} }

static class StaticNestedClass {

} class InnerClass {

} }

4

3.1 Static nested classes

Được truy cập từ tên của class bao nó

Để tạo 1 đối tượng của static nested class:

Chỉ được truy cập các thành viên static của

class bao nó

5

3.1 Static nested classes (2)

public class Outside { public static class Skinside { public Skinside()

{ System.out.println("Demo static");

} } public class Inside { }

public static void main(String[] arg) { Outside.Skinside example = new Outside.Skinside();

} }

6

Trang 43

3.2 Inner Class

1 thể hiện (instance) của inner class chỉ tồn

tại được trong 1 thể hiện của outer class

7

3.2 Inner Class (2)

 Inner class có thể truy cập tới 1 member bất kỳ của outer class

 Inner class không được có thành phần static

public class Outer { private int id;

private class Inner {

private static int defaultId; //Error

public Inner() {

id = 00001; //Truy cập được id ngoài }

}

8

public class DataStructure {

private final static int SIZE = 15;

private int[] arrayOfInts = new int[SIZE];

public DataStructure() {//fill the array with ascending integer values

for (int i = 0; i < SIZE; i++) {

arrayOfInts[i] = i;

}

}

public void printEven() {//In chỉ số lẻ trong mảng

InnerEvenIterator iterator = this.new InnerEvenIterator();

while (iterator.hasNext()) {

System.out.println(iterator.getNext() + " ");

}

}

private class InnerEvenIterator { //inner class implements the Iterator pattern

//start stepping through the array from the beginning

private int next = 0;

public boolean hasNext() {

return (next <= SIZE - 1); //check if current element is the last in the array

}

public int getNext() {

int retValue = arrayOfInts[next];

next += 2; //get the next even element

return retValue;

}

}

public static void main(String s[]) {

//fill the array with integer values and print out only values of even indices

DataStructure ds = new DataStructure();

public static void main(String args[]) {

Outer outer = new Outer();

} public class Outer{

private int count = 0;

Counter getCounter(final String name) { return new Counter() {

{ System.out.println("Constructor Counter()");

} public int next() { System.out.print(name); // Access local final System.out.println(count);

return count++;

} };

} public static void main(String[] args) { Outer out = new Outer();

Counter c1 = out.getCounter("Local inner ");

c1.next();

}

12

Ngày đăng: 28/05/2016, 16:01

HÌNH ẢNH LIÊN QUAN

Hình hai chiều Hình ba chiều - Tài Liệu Lập Trình Hướng Đối Tượng Full
Hình hai chiều Hình ba chiều (Trang 48)

TỪ KHÓA LIÊN QUAN

w