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

Bắt đầu với Java docx

334 310 0
Tài liệu đã được kiểm tra trùng lặp

Đ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

Tiêu đề Bắt đầu với Java
Tác giả Nguyễn Việt Hà
Trường học Trường Đại Học
Chuyên ngành Công Nghệ Thông Tin
Thể loại Bài viết
Năm xuất bản 2023
Thành phố Hà Nội
Định dạng
Số trang 334
Dung lượng 1,86 MB

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

Nội dung

Đóng gói/che dấu thông tin„ Đóng gói dữ liệu và các thao tác tác động lên dữ liệu thành một thể thống nhất lớp đối tượng thuận tiện cho sử dụng lại „ Che dấu thông tin thao tác với dữ l

Trang 1

Bắt đầu với Java

Trang 2

Nội dung

„ Lịch sử của Java

„ Các đặc trưng cơ bản

„ Java applications và Java applets

„ Tạo ứng dụng Java đơn giản

Trang 3

Lịch sử hình thành

„ 1991: được Sun Microsystems phát triển nhằm mục đích viết phần mềm điều khiển (phần mềm nhúng) cho các

sản phẩm gia dụng

… lúc đầu được đặt tên là Oak

„ 1995: được phổ cập với sự phát triển mạnh mẽ của

Internet

… thị trường phần mềm nhúng không phát triển mạnh

… WWW bùng nổ (1993~)

„ Hiện nay, được chấp nhận rộng rãi với tư cách là một

ngôn ngữ (công nghệ) đa dụng

… khả chuyển, an toàn

Trang 4

Java là một công nghệ

Java bao gồm

„ Ngôn ngữ lập trình

„ Môi trường phát triển

„ Môi trường thực thi và triển khai

Trang 5

Mục tiêu của Java

Trang 6

Mục tiêu của Java

„ Cho phép chạy nhiều tiến trình (threads)

„ Nạp các lớp (classes) động vào thời điểm cần thiết từ nhiều nguồn khác nhau

…Cho phép thay đổi động phần mềm trong khi hoạt động

„ Tăng độ an toàn

Trang 7

Biên dịch và thông dịch

„ Chương trình nguồn được biên dịch sang

mã đích (bytecode)

„ Mã đích (bytecode) được thực thi trong

môi trường thông dịch (máy ảo)

Trang 8

Các dạng ứng dụng của Java

„ Desktop applications - J2SE

…Java Applications: ứng dụng Java thông

thường trên desktop

…Java Applets: ứng dụng nhúng hoạt động

trong trình duyệt web

„ Server applications - J2EE

…JSP và Servlets

„ Mobile (embedded) applications – J2ME

Trang 9

Đặc trưng của Java

„ JVM – máy ảo Java

„ Cơ chế giải phóng bộ nhớ tự động

„ Bảo mật chương trình

Trang 10

JVM - Máy ảo Java

„ Máy ảo phụ thuộc vào platform (phần cứng, OS)

„ Cung cấp môi trường thực thi cho chương trình Java (độc lập với platform)

„ Máy ảo đảm bảo an toàn cho hệ thống

„ Máy ảo thông thường được cung cấp dưới dạngphần mềm

… JRE - Java Runtime Environment

„ Java platform: JVM + APIs

Trang 11

Giải phóng bộ nhớ

(Garbage Collection)

„ Java cung cấp một tiến trình mức hệ

thống để theo dõi việc cấp phát bộ nhớ

Trang 12

Chống sao chép

Trang 13

… javac Chương trình dịch chuyển mã nguồn sang bytecode

… java Bộ thông dịch: Thực thi java application

… appletviewer Bộ thông dịch: Thực thi java applet mà không

cần sử dụng trình duyệt như Nestcape, hay IE, v.v.

… javadoc Bộ tạo tài liệu dạng HTML từ mã nguồn và chú

thích

… jdb Bộ gỡ lỗi (java debuger)

… javap Trình dịch ngược bytecode

Trang 14

Công nghệ JIT

Just-In-Time Code Generator

Trang 15

Java Applications

„ Chương trình ứng dụng hoàn chỉnh

„ Giao diện dòng lệnh hoặc đồ họa

„ Được bắt đầu bởi phương thức (hàm)

main() là phương thức public static

Trang 16

Chương trình Java đơn giản

TestGreeting.java:

public class TestGreeting{

public static void main (String[] args) {

System.out.println(”Hello, world”);

}

}

public class

public static method

class object message

Trang 18

Một chút cải tiến

TestGreeting.java:

public class TestGreeting {

public static void main(String[] args) {

Greeting gr = new Greeting();

gr.greet();

}

}

Greeting.java:

public class Greeting {

public void greet() {

System.out.print(”Hello, world”);

}

Trang 20

Java Applets

„ Được nhúng trong một ứng dụng khác

(web browser)

„ Có giao diện hạn chế (đồ họa)

„ Không truy cập được tài nguyên của client

(không thực hiện được các hành vi xấu)

Trang 21

Applet đơn giản

Welcome.java:

// Java packages

import java.awt.Graphics;

import java.applet.Applet;

public class Welcome extends Applet {

public void paint(Graphics g)

{

// call superclass version of method paint super.paint(g);

// draw a String g.drawString(”Welcome to Java programming!”, 25, 25);

Trang 22

Nhúng vào trang Web

Trang 23

Thực hiện (trong webbrowser)

Trang 24

Thực hiện

appletviewer Welcome.html

Trang 25

Các phương thức của Applet

„ init() : khởi tạo applet

„ start() : khởi động applet

…mặc định sẽ gọi paint()

„ stop() : dừng applet

„ destroy() : giải phóng (hủy) applet

Trang 26

Thực hành

„ Đăng nhập vào website môn học

„ Làm quen với môi trường phát triển Java trên Linux và Windows

„ Tập viết các ứng dụng nhỏ

…các ví dụ trong bài giảng

…chuyển các bài thực hành cơ bản của môn

C/C++ sang Java

Trang 27

Bài tập: Tìm hiểu về Java

„ Các kiểu dữ liệu cơ bản

…các kiểu số nguyên, kiểu ký tự, kiểu logic

„ Từ khóa, cách đặt tên (lớp, phương thức, biến

„ Các cấu trúc điều khiển cơ bản

…điều kiện

…vòng lặp

…switch

Trang 28

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

Khái niệm

Trang 29

Nội dung

„ Lịch sử phát triển của kỹ thuật lập trình

„ Hạn chế của kỹ thuật lập trình truyền

thống

„ Khái niệm lập trình hướng đối tượng

…Đóng gói / Che dấu thông tin

Trang 30

Tài liệu tham khảo

Trang 31

Mục tiêu của kỹ sư phần mềm

„ Tạo ra sản phẩm tốt một cách có hiệu quả

„ Nắm bắt được công nghệ

„ Kiếm được nhiều tiền hơn nữa!

Trang 32

„ Người dùng ngày càng đòi hỏi nhiều chức

năng, đặc biệt là chức năng thông minh

„ Phần mềm luôn cần được sửa đổi

Trang 33

…Giảm chi phí và thời gian phát triển

…Nâng cao chất lượng

Trang 36

Lập trình không có cấu trúc

(non-structured programming)

„ Là phương pháp xuất hiện đầu tiên

… các ngôn ngữ như Assembly, Basic

Trang 40

… khó đảm bảo tính đúng đắn của dữ liệu

… không tự động khởi tạo hay giải phóng dữ liệu động

Trang 41

Tại sao phải thay đổi cấu trúc dữ liệu?

„ Cấu trúc dữ liệu là mô hình của bài toán cần giải quyết

… Do thiếu kiến thức về bài toán, về miền ứng dụng , không phải lúc nào cũng tạo được cấu trúc dữ liệu

hoàn thiện ngay từ đầu

… Tạo ra một cấu trúc dữ liệu hợp lý luôn là vấn đề đau đầu của người lập trình.

„ Bản thân bài toán cũng không bất biến

… Cần phải thay đổi cấu trúc dữ liệu để phù hợp với các

Trang 42

Các vấn đề

„ Thay đổi cấu trúc

… dẫn đến việc sửa lại mã chương trình (thuật toán)

tương ứng và làm chi phí phát triển tăng cao.

… không tái sử dụng được các mã xử lý ứng với cấu trúc

dữ liệu cũ.

„ Đảm bảo tính đúng đắn của dữ liệu

… một trong những nguyên nhân chính gây ra lỗi phần mềm là gán các dữ liệu không hợp lệ

… cần phải kiểm tra tính đúng đắn của dữ liệu mỗi khi

Trang 43

MyDate d = new MyDate();

d.day = 32; // invalid day

d.day = 31; d.month = 2; // how to check

d.day = d.day + 1; //

Trang 44

Ví dụ: MyDate (2)

Thay đổi cấu trúc dữ liệu:

MyDate.java:

class MyDate {

public short year;

public short mon_n_day;

}

Trang 45

Giải pháp

„ Che dấu dữ liệu (che dấu cấu trúc)

„ Truy cập dữ liệu thông qua giao diện xác định

class MyDate {

private int year, mon, day;

public int getDay() { }

public boolean setDay(int) { }

Trang 47

Đóng gói/che dấu thông tin

„ Đóng gói dữ liệu và các thao tác tác động lên dữ liệu thành một thể thống nhất (lớp đối tượng) thuận tiện cho sử dụng lại

„ Che dấu thông tin

…thao tác với dữ liệu thông qua các giao diệnxác định

…che dấu người lập trình khách (client

programmer) cái có khả năng thay đổi (tách

cái bất biến ra khỏi cái khả biến)

Trang 48

Lớp và đối tượng

„ Lớp đối tượng (class) là khuôn mẫu để

sinh ra đối tượng

„ Đối tượng là thể hiện (instance) của một lớp Đối tượng có

…định danh

…thuộc tính (dữ liệu)

…hành vi (phương thức)

Trang 49

Hệ thống hướng đối tượng

„ Bao gồm một tập các đối tượng

…mỗi đối tượng chịu trách nhiệm một công việc

„ Các đối tượng tương tác thông qua trao đổi thông điệp (message)

„ Các đối tượng có thể tồn tại phân tán/có

thể hoạt động song song

Trang 50

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

+ getDay() + setDay(int) + getMonth() + setMonth(int) + getYear()

Trang 51

Lịch sử ngôn ngữ lập trình

FORTRAN I FORTRAN II

ALGOL 58

CPL COBOL

COMTRAN FLOW-MATIC

FORTRAN IV

B

BCPL ALGOL 68

MODULA 2

MODULA 3

OBERON

Trang 52

Lập trình hướng đối tượng làm tăng

„ năng suất lập trình (năng suất phát triển)

„ chất lượng phần mềm

„ tính hiểu được của phần mềm

„ vòng đời của phần mềm

Trang 53

OOP và OOL

„ Có thể thể hiện phần nào tư tưởng đóng gói/che dấu thông tin trên ngôn ngữ thủ

tục

…không triệt để, khó kiểm soát

„ Ngôn ngữ hướng đối tượng cung cấp khả năng kiểm soát truy cập; ngoài ra

…kế thừa

…đa hình

Trang 54

Lớp và đối tượng trong Java

Trang 55

Nội dung

„ Định nghĩa lớp

„ Thuộc tính

„ Phương thức

„ Kiểm soát truy cập

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

„ Thao tác với đối tượng

Trang 56

Tài liệu tham khảo

Trang 58

Đối tượng

„ Đối tượng được thao tác thông qua tham chiếu

… Tham chiếu đóng vai trò gần giống như một con trỏ

„ Đối tượng phải được tạo ra một cách tường

minh bằng toán tử new

MyDate d;

d = new MyDate();

MyDate myBirthday = d;

Trang 59

Thuộc tính, phương thức và kiểm soát truy cập

class MyDate {

Trang 60

MyDate d = new MyDate();

d.year = 2005; // compile error

d.setYear(2005);

System.out.println(”Year=” + d.getYear());

Trang 61

Phương thức trùng tên (overload)

„ Có thể định nghĩa các phương thức trùng tên, tuy nhiên phải phân biệt bởi danh sách tham số

class MyDate {

public boolean setMonth(int m) { …}

public boolean setMonth(String s) { …}

}

d.setMonth(9);

d.setMonth(”September”);

Trang 62

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

„ Dữ liệu nên được khởi tạo trước khi sử

dụng

…lỗi khởi tạo là một trong các lỗi phổ biến

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

…là phương thức đặc biệt được gọi tự động

sau khi tạo ra đối tượng

…nhằm mục đích chính là khởi tạo cho các

thuộc tính của đối tượng

Trang 63

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

„ Có tên trùng với tên lớp

„ Không nhận giá trị trả lại

„ Mỗi khi đối tượng được tạo ra bởi toán tử new , hệ thống sẽ tự động gọi phương

thức khởi tạo.

…nếu không khai báo, hệ thống sẽ gọi

constructor mặc định là một phương thức

rỗng

Trang 65

Ví dụ: Constructor mặc định

class SayMsg {

SayMsg() {

System.out.println(”Hello”);}

}

SayMsg msg = new SayMsg();

Trang 66

SayMsg msg1 = new SayMsg();

SayMsg msg2 = new SayMsg(”Java”);

Trang 67

SayMsg msg1 = new SayMsg(); // error

SayMsg msg2 = new SayMsg(””);

Trang 68

Copy constructor

„ Khởi tạo đối tượng bằng một đối tượng khác

public class MyDate {

private int year, month, day;

Trang 69

MyDate d = new MyDate();

Trang 70

Kiểm soát truy cập

public class MyDate {

private int year, month, day;

Trang 71

Hiểu thêm về Java

Trang 73

Tài liệu tham khảo

Trang 74

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

„ Java cung cấp các kiểu nguyên thủy

… số: byte, short, int, long, float, double

„ không có khái niệm unsigned

„ kích thước cố định trên mọi platform

„ Tồn tại lớp đối tượng tương ứng: Interger, Float,

… Interger count = new Interger(0);

Trang 75

1.79769313486231570e+308 4.94065645841246544e-324

64

double

3.40282346638528860e+38 1.40129846432481707e-45

32

float

+ 2 63 - 1

- 2 63 64

long

+ 2 31 - 1, 0x7fffffff

- 2 31 , 0x80000000 32

int

32767 (2 15 -1) -32768 (-2 15 )

16

short

+127 (2 7 -1) -128 (-2 7 )

8

byte

0xffff 0x0

16

char

Giá trị cực đại Giá trị cực tiểu

Độ rộng (bits) Kiểu

dữ liệu

Trang 76

Dữ liệu được lưu trữ ở đâu

„ Dữ liệu kiểu nguyên thủy

…thao tác thông qua tên biến

„ Dữ liệu là thuộc tính của đối tượng

…Đối tượng được thao tác thông qua tham

chiếu

„ Vậy biến kiểu nguyên thủy, tham chiếu và đối tượng được lưu trữ ở đâu?

Trang 77

temporary data

dynamic data

Trang 78

Tham chiếu

„ Đối tượng được thao tác thông qua tham chiếu

… là con trỏ tới đối tượng

… thao tác trực tiếp tới thuộc tính và phương thức

… không có các toán tử con trỏ

… phép gán (=) không phải là phép toán copy nội dung đối tượng

„ tham chiếu được lưu trữ trong vùng nhớ

static/stack như các con trỏ trong C/C++

Trang 79

Toán tử New

„ Phải tạo mọi đối tượng một cách tường

minh bằng toán tử new

Trang 80

Phép gán “=”

„ Phép gán không phải là copy thông thường

… copy nội dung của tham chiếu

… hai tham chiếu sẽ tham chiếu đến cùng đối tượng

Integer m = new Integer(10);

Integer n = new Integer(20);

m = n;

n.setValue(50);

System.out.print(m);

Trang 82

Integer n1 = new Integer(47);

Integer n2 = new Integer(47);

System.out.println(n1 == n2);

System.out.println(n1 != n2);

false

Trang 83

So sánh nội dung đối tượng

MyDate d1 = new MyDate(10,10,1954);

MyDate d2 = new MyDate(d1);

System.out.println(d1.equalTo(d2));

Trang 84

… Không phải viết mã giải phóng đối tượng

… Do đó, không bao giờ quên giải phóng đối tượng

Trang 85

GC hoạt động như thế nào

„ Sử dụng cơ chế đếm?

…mỗi đối tượng có một số đếm các tham chiếu trỏ tới

…giải phóng đối tượng khi số đếm = 0

„ Giải phóng các đối tượng chết

…kiểm tra tất cả các tham chiếu

…đánh dấu các đối tượng còn được tham chiếu

…giải phóng các đối tượng không được tham chiếu

Trang 86

Garbage Collection

MyDate openDate = new MyDate(1,10,2005);

MyDate startDate = new MyDate(10,10,2005);

Trang 87

Truyền tham số và nhận giá trị trả lại

„ Truyền giá trị

…đối với dữ liệu kiểu nguyên thủy

…giá trị của tham số (RValue) được copy lên stack

…có thể truyền hằng số (vd: 10, 0.5, …)

„ Truyền tham chiếu

…đối với đối tượng

…nội dung của tham chiếu (LValue) được copy lên stack

Trang 89

Truyền tham chiếu

class MyDate {

int year, month, day;

public MyDate(int y, int m, int d) {

year = y; month = m; day = d;

public MyDate copy() {

return new MyDate(day, month, year);

}

Trang 90

Truyền tham chiếu

Trang 91

Tham chiếu this

„ Java cung cấp tham chiếu this để trỏ tới chính đối tượng đang hoạt động

„ this được sử dụng vào các mục đích

như

…tham chiếu tường minh đến thuộc tính và

phương thức của đối tượng

…truyền tham số và trả lại giá trị

…dùng để gọi constructor

Trang 92

this làm giá trị trả lại

Trang 94

Gọi constructor bằng this

class MyDate {

private int year, month, day;

public MyDate(int y, int m, int d) {

}

// copy constructor

MyDate(MyDate d) {

this(d.year, d.month, d.day);

System.out.println(”copy constructor called”);

Trang 95

Phương thức và thuộc tính static

„ Có thể khai báo phương thức và thuộc

tính là tĩnh (static)

…độc lập với đối tượng

…có thể sử dụng mà không cần có đối tượng

Trang 96

Gói các lớp đối tượng (package)

„ Các lớp đối tượng được chia thành các gói

… nếu không khai báo thì các lớp thuộc gói default

… các lớp trong cùng một tệp mã nguồn luôn thuộc cùng một gói

„ Tồn tại mức truy cập package

… mức package là mặc định (nếu không khai báo tường minh là public hay private)

… các đối tượng của các lớp thuộc cùng gói có thể truy cập đến non-private members của nhau

… chỉ có thể tạo (new) đối tượng của lớp được khai báo

là public của gói khác

Trang 97

class HelloMsg {

void sayHello() {

System.out.println(”Hello, world!”); }

}

public class Hello {

public static void main(String[] args) {

HelloMsg msg = new HelloMsg();

msg.sayHello();

Trang 98

Khai báo và sử dụng package

„ Khai báo gói bằng lệnh package

…các gói được lưu trữ theo cấu trúc cây thư

Trang 99

Đối tượng hợp thành (Composition)

„ Đối tượng có thể chứa các đối tượng khác (các thuộc tính không thuộc kiểu nguyên thủy)

„ Thuộc tính là tham chiếu phải được tạo ra bằng new

hoặc được gán cho một đối tượng đã tồn tại

class Person {

private String name;

private MyDate birthday;

}

Trang 100

Get và Set thuộc tính không thuộc kiểu nguyên thủy

Trang 101

Sử dụng copy constructor

class Person {

private String name;

private MyDate birthday;

public Person(String s, MyDate d) {

name = s;

birthday = new MyDate(d);

}

public MyDate getBirthday() {

return new MyDate(birthday);

}

public void setBirthday(MyDate d) {

birthday = new MyDate(d);

}

Trang 102

Vào ra từ luồng dữ liệu chuẩn

„ Luồng ra chuẩn: System.out

…xuất ra luồng ra chuẩn (standard output)

…có thể tái định hướng

„ Luồng thông báo lỗi: System.err

…xuất ra Console (thiết bị output chuẩn)

…không thể tái định hướng

„ Luồng dữ liệu vào chuẩn: System.in

…chưa sẵn sàng cho sử dụng

Trang 103

Nhập dữ liệu từ luồng vào chuẩn

„ InputStream: lớp đối tượng ứng với luồng vào

chuẩn

… System.in : đối tượng tương ứng

… chưa có phương thức nhập dữ liệu

„ InputStreamReader: nhập dữ liệu không thông qua buffer

… đọc từng ký tự (kể cả ký tự đặc biệt)

„ BufferedReader: sử dụng buffer

đọc từng dòng

Trang 104

Ví dụ

import java.io.*;

public class Echo {

public static void main(String[] args)

throws IOException {

InputStreamReader reader;

BufferedReader bufReader;

reader = new InputStreamReader(System.in);

bufReader = new BufferedReader(reader);

Trang 107

Tham số dòng lệnh

CmdLineParas.java:

public class CmdLineParas {

public static void main( String[] args ) {

for (int i=0; i< args.length ; i++)

Trang 108

Kế thừa

Trang 109

…thêm phương thức, thuộc tính

…kiểm soát truy cập

…constructor

Trang 110

Tài liệu tham khảo

Trang 111

Sử dụng lại

„ Tồn tại nhiều loại đối tượng có các thuộc tính và hành vi tương tự hoặc liên quan

đến nhau

…Person, Student, Manager,…

„ Xuất hiện nhu cầu sử dụng lại các mã

nguồn đã viết

…Sử dụng lại thông qua copy

…Sử dụng lại thông qua quan hệ has_a

Ngày đăng: 27/06/2014, 12:20

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w