VII.1. Lấy giỏ trị nhập vào từ bàn phớm
Để lấy giỏ trị mà người sử dụng nhập từ bàn phớm, ta làm theo cỏc bước sau:
1. Khai bỏo biến thuộc lớp Scanner”. Lớp Scanner chỉ được hỗ trợ từ phiờn bản Java 1.5 và nằm trong gúi java.util.
// Khai bỏo một biến Scanner cú tờn là “nhap”.
Java.util.Scanner nhap = new java.util.Scanner(System.in); 2. Lấy giỏ trị nhập vào:
System.out.print("What is your name? "); // In ra màn hỡnh một cõu hỏi tờn /* Khai bỏo và gỏn giỏ trị nhập từ bàn phớm cho một biến kiểu String cú tờn name.*/ String name = nhap.nextLine();
Để đọc 1 từ trong chuỗi nhập vào: String firstName = nhap.next(); Nếu đọc vào một số nguyờn: int Tuoi = nhap.nextInt();
Tương tự cho cỏc kiểu dữ liệu khỏc. Vớ dụ:
import java.util.*; public class InputTest {
public static void main(String[] args) {
Scanner nhap = new Scanner(System.in); // Lay gia trị nhap ho ten
System.out.print("What is your name? "); String name = nhap.nextLine();
// Lay gia tri nhap tiep theo
System.out.print("How old are you? "); int age = nhap.nextInt();
// Hien thi ket qua nhap tren man hinh
System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1)); }
VII.2 Kết xuất dữ liệu ra màn hỡnh
Trong cỏc chương trỡnh vớ dụ trờn, ta đó biết dựng hàm System.out.print để in dữ liệu ra màn hỡnh. Tuy nhiờn, trong một số trường hợp ta cần định dạng dữ liệu xuất ra chẳng hạn như hiển thị một số thực dạng thập phõn với độ chớnh xỏc nhất định.
System.out.printf(“%8.1f”, 10/3);
System.out.printf(“Hello, %s. You have %f VND ”, name,money); Sau đõy là bảng cỏc ký tự định dạng: Ký tự định dạng Định dạng Vớ dụ D Số nguyờn thập phõn 159 X Số nguyờn hệ 16 9f O Số nguyờn hệ 8 237 F Số thực float 15.9
E Số thực float theo ký phỏp cơ số e 1.59e+01
A Số thực float dạng Hexa 0x1.fccdp3
S String Hello
C Ký tự H
B Boolean True
H Hash code 42628b2
tx Date and time
% Ký hiệu phần trăm %
N Xuống dũng
Sau đõy là vớ dụ sử dụng cỏc ký tự định dạng khi xuất dữ liệu ra màn hỡnh. public class TestFormat
{
public static void main(String[] argvs) {
double sothuc = 10.09898765;
/*In ra số thực chiếm 10 ký tự trờn màn hỡnh trong đú phần thập phõn chiếm 3 ký tự*/ System.out.printf("Ket qua 3 so sau dau phay la %10.3f \n",sothuc);
int songuyen =100; /*In ra số nguyờn ở hệ cơ số 16*/
System.out.printf("He 16 cua 100 duoc viet la: %x \n",songuyen); /*In ra số nguyờn ở hệ cơ số 8*/
System.out.printf("He 8 cua 100 duoc viet la: %o \n",songuyen); /*In ra ký tự đặc biệt “” */
System.out.print("\"Mot tram phan tram\" thi in ra the nao: 100%"); }}
Lưu ý rằng khi sử dụng cỏc ký tự định dạng ta cần dựng hàm System.out.printf() thay vỡ System.out.print() hay System.out.println() như thường lệ.
Bài tập
1. Viết chương trỡnh tớnh giỏ trị cỏc biểu thức (Giỏ trị n, k,…nhập từ bàn phớm): A = 1 + 1/2! + 1/3! + … + 1/n!
B = 1/1! – 1/2! + 1/3! - 1/4! + … + 1/(2k+1)! - ….
2. Viết chương trỡnh đếm số từ cú trong một chuỗi ký tự nhập vào. Cỏc từ cỏch nhau bởi dấu space,. và ;
3. Viết chương trỡnh đếm tần suất xuất hiện của cỏc từ trong một chuỗi nhập từ bàn phớm. 4. Nhập vào một chuỗi họ tờn của một người, hóy sửa lại cỏc ký tự đầu cỏc từ cho đỳng quy định viết hoa và khoảng cỏch giữa cỏc từ. Vớ dụ: nguyen van nam -> Nguyen Van Nam
5. Tỡm cỏc lỗi trong cỏc đoạn chương trỡnh sau: a)
For ( x = 100, x >= 1, x++ ) System.out.println( x );
b) Đoạn mó sau sẽ in ra cỏc giỏ trị chẵn hay lẻ: switch ( value % 2 ) {
case 0:
System.out.println( "Even integer" ); case 1:
System.out.println( "Odd integer" ); }
c) Đoạn mó sau sẽ in ra cỏc số nguyờn lẻ từ 19 đến 1 ?: for ( x = 19; x >= 1; x += 2 )
System.out.println( x );
d) Đoạn mó sau sẽ in ra cỏc số nguyờn chẵn từ 2 đến 100 ?: counter = 2;
do {
System.out.println( counter ); counter += 2;
} While ( counter < 100 );
6. Đoạn chương trỡnh sau làm gỡ? public class Printing {
public static void main( String args[] ) {
for ( int i = 1; i <= 10; i++ ) { for ( int j = 1; j <= 5; j++ ) System.out.print( '@' ); System.out.println(); } } }
7. Viết chương trỡnh tỡm số nhỏ nhất trong số cỏc số được nhập vào từ bàn phớm. Cho biết số nguyờn đầu tiờn nhập vào sẽ chớnh là số cỏc con số được nhập.
8. Viết chương trỡnh in ra màn hỡnh cỏc mẫu như sau:
9. Tớnh số PI theo cụng thức sau:
Đề tài 3. Lập trỡnh hướng đối tượng trong Java
I. Khỏi niệm lập trỡnh hướng đối tượng (Object-Oriented Programming - OOP) I.1. Khỏi niệm OOP I.1. Khỏi niệm OOP
Lập trỡnh hướng đối tượng là sự cài đặt một chương trỡnh theo hướng đối tượng bằng cỏc ngụn ngữ lập trỡnh, thường là ngụn ngữ OOP.
Như vậy, nếu dựng một ngụn ngữ OOP mà chương trỡnh khụng theo hướng đối tượng thỡ cũng khụng phải là lập trỡnh OOP. Trong khi nếu dựng một ngụn ngữ khụng hướng đối tượng để viết một chương trỡnh OOP (rất khú khăn) thỡ cũng cú thể gọi là lập trỡnh OOP. Thực tế thỡ ta khụng thể viết chương trỡnh hướng đối tượng bằng cỏc ngụn ngữ cấu trỳc (như Pascal chẳng hạn) vỡ cỏc ngụn ngữ này khụng hỗ trợ cỳ phỏp cài đặt và kỹ thuật biờn dịch cỏc đặc tớnh của hướng đối tượng.
Những ngụn ngữ OOP khụng chỉ bao gồm cỳ phỏp và một trỡnh biờn dịch (compiler) mà cũn cú một mụi trường phỏt triển toàn diện. Mụi trường này bao gồm một thư viện được thiết kế tốt, thuận lợi cho việc sử dụng kế thừa cỏc đối tượng – tớnh tỏi sử dụng. Đõy là một điểm mạnh của OOP và phương phỏp trước đõy khụng cú được.
Đối với một ngụn ngữ lập trỡnh hỗ trợ OOP thỡ việc triển khai kỹ thuật lập trỡnh hướng đối tượng sẽ dễ dàng hơn. Hơn nữa, cỏc dự ỏn phần mềm phõn tớch và thiết kế theo UML bắt buộc phải sử dụng kỹ thuật OOP để cài đặt thỡ mới phỏt huy hiệu quả.
I.2 Cơ sở lý luận của OOP
Chỳng ta thấy rằng thuật ngữ “hướng đối tượng” cú nghĩa là lấy đối tượng làm trung tõm và tất cả nằm trong đối tượng. Quan sỏt thế giới thực, ta thấy mọi vật đều cú vị trớ riờng của nú, chỳng sở hữu cỏc tớnh chất và thuộc tớnh riờng, cỏch thức vận động riờng. Chỳng ta gọi chỳng là những đối tượng. Theo cỏch hiểu như vậy thỡ mọi nghiệp vụ thực tế suy cho cựng chỉ là việc quản lý cỏc đối tượng, khai thỏc thụng tin cũng như cỏc mối quan hệ từ chỳng hoặc thay đổi trạng thỏi của chỳng.
OOP là phương thức tư duy mới để giải quyết vấn đề bằng mỏy tớnh. Để đạt kết quả, lập trỡnh viờn phải nắm được sự tương ứng giữa cỏc cỏc đối tượng thực tế, mối quan hệ giữa chỳng và sự hỗ trợ của ngụn ngữ để cài đặt chỳng vào mỏy tớnh. Ngụn ngữ OOP cung cấp đầy đủ phương tiện để thực hiện điều này. Chỳng ta sử dụng kỹ thuật hướng đối tượng để ỏnh xạ những thực thể chỳng ta gặp phải trong đời sống thực thành những thực thể tương tự trong mỏy tớnh. Do đú, phỏt triển phần mềm theo kỹ thuật lập trỡnh hướng đối tượng cú khả năng giảm thiểu sự lẫn lộn thường xảy ra giữa hệ thống và lĩnh vực ứng dụng.
Tuy nhiờn, từ nghiệp vụ thực tế chỳng ta khụng thể ngay lập tức đem vào cài đặt trong ngụn ngữ OOP mà phải qua một quy trỡnh phõn tớch và thiết kế theo hướng đối tượng như chỳng ta đó thấy qua việc nghiờn cứu ngụn ngữ mụ hỡnh húa UML – một ngụn ngữ giỳp chỳng ta trừu tượng húa thế giới thực.
I.3 Trừu tượng húa
Quản lý thụng tin, cỏc hành vi, cỏc mối quan hệ của cỏc đối tượng là nhiệm vụ mà lập trỡnh OOP phải làm. Thụng tin về đối tượng và mối quan hệ giữa chỳng thực tế là vụ cựng. Vậy làm thế nào để đưa chỳng vào mỏy tớnh? Cõu trả lời là chỳng ta cần một quỏ trỡnh trừu tượng húa.
Giả sử đối tượng quản lý là một sinh viờn. Một hệ thống quản lý sinh viờn cú thể chỉ cần quan tõm tới: Họ và tờn, ngày sinh, lớp học, địa chỉ nơi ở, điểm cỏc mụn học. Trong khi đú, cỏc thụng tin khỏc về sinh viờn – cũng là một con người – như chiều cao, cõn nặng, nhúm mỏu,…chỳng ta khụng cần quan tõm. Một quỏ trỡnh suy luận như vậy là một quỏ trỡnh trừu tượng húa dữ liệu. Ở đõy ta khụng quan tõm tới giỏ trị cụ thể của cỏc thuộc tớnh này.
Khi quan tõm tới giỏ trị của cỏc thuộc tớnh, chỳng ta cú một cõu hỏi: Cỏi gỡ làm cho dữ liệu này biến đối? Cõu trả lời là chớnh hành vi của đối tượng làm cho thuộc tớnh của chỳng bị thay đổi. Trong vớ dụ trờn, một anh sinh viờn bất kỳ cú thể cú hành vi “xin đổi lớp học” hoặc “đổi địa chỉ nơi ở” làm cho giỏ trị cỏc thuộc tớnh “lớp học”, “địa chỉ nơi ở” bị thay đổi. Quỏ trỡnh xỏc định cỏc hành vi của đối tượng phục vụ cho nghiệp vụ quản lý cũng là một quỏ trỡnh trừu tượng húa hành vi.
Túm lại, chỳng ta cú một mụ hỡnh trừu tượng húa của một sinh viờn: Sinh viờn Họ và tờn Ngày sinh Tờn lớp Địa chỉ Điểm mụn học Thay đổi lớp Thay đổi nơi ở
Điểm quan trọng là sau khi trừu tượng húa từ một lớp cỏc sinh viờn (tất cả cỏc sinh viờn trong phạm vi quản lý), mụ hỡnh này đại diện cho tất cả sinh viờn và là khuụn mẫu để tạo ra bất kỳ sinh viờn nào khỏc.
Qua đõy, ta cũng rỳt ra nhận xột rằng quỏ trỡnh trừu tượng húa tựy theo yờu cầu nghiệp vụ sẽ cho kết quả khỏc nhau. Cũng là một sinh viờn nhưng nếu chẳng may anh ta bị ốm nằm viện, anh ta được quản lý như một bệnh nhõn. Một hệ thống quản lý bệnh nhõn tất nhiờn khụng thể bỏ qua cỏc thụng tin về nhúm mỏu, cõn nặng, huyết ỏp,…và tất nhiờn là cũng cú cỏc mụ hỡnh hành vi khỏc.
Túm lại:
Cỏc thực thể tồn tại trong thế giới thực được mụ hỡnh húa thành cỏc lớp đối tượng.
Cỏc mối quan hệ giữa cỏc thực thể trong thế giới thực được mụ hỡnh húa bằng cỏc mối quan hệ giữa cỏc lớp đối tượng.
Thế giới thực = Cỏc đối tượng + Cỏc mối quan hệ
Cỏc lớp đối tượng trong chương trỡnh - Classes
II. Tớnh đúng gúi trong Java II.1 Khỏi niệm tớnh đúng gúi II.1 Khỏi niệm tớnh đúng gúi
Tớnh đúng gúi thể hiện bởi việc thuộc tớnh mụ tả đối tượng và hành vi của đối tượng được gắn chặt với nhau. Thuộc tớnh thể hiện trạng thỏi đối tượng, hành vi làm thay đổi trạng thỏi đối tượng thụng qua việc thay đổi giỏ trị cỏc thuộc tớnh.
Thuộc tớnh được cài đặt thụng qua mó lệnh Java bằng cỏc biến thành phần trong lớp. Hành vi được cài đặt thụng qua mó lệnh Java bởi cỏc phương thức.
Thụng tin và hành vi đối tượng được bảo vệ bằng cỏc cấp độ truy cập: public, private. Cấp độ public cho phộp sự truy cập từ bờn ngoài lớp trong khi private chỉ cho phộp nội bộ lớp truy cập.
Đối tượng được sinh ra bởi class - một sự mụ hỡnh húa một lớp đối tượng trong thực tế. object = attributes (cỏc thuộc tớnh) + operations(cỏc hành vi) + name (tờn định danh) Như vậy tớnh đúng gúi thể hiện việc chuyển mụ hỡnh đối tượng thực tế thành cỏc lớp trong Java.
II.2 Mối quan hệ giữa cỏc class
Cỏc class trong chương trỡnh cú thể quan hệ với nhau theo 1 trong 3 dạng:
Phụ thuộc (Dependence): Class A cú quan hệ phụ thuộc với class B nếu phương thức của class A cú sử dụng đối tượng thuộc class B.
Bao gồm (Aggregation): Class A cú quan hệ bao gồm với class B nếu đối tượng của class A chứa đối tượng của class B.
Thừa kế (inheritance): Class B gọi là thừa kế class A nếu class B cú cỏc phương thức và thuộc tớnh của class A, ngoài ra class B cũn định nghĩa cỏc phương thức và thuộc tớnh khỏc của riờng nú.
Vớ dụ: Trong hệ thống bỏn hàng chỳng ta cú: class DanhMucMatHang class TaiKhoan class HoaDon class HoaDonThanhToanNhanh
Mỗi HoaDon bao gồm 1 DanhMucMatHang: Quan hệ aggregation.
Khi một HoaDon được tạo ra, nú cần truy cập đến class TaiKhoan để kiểm tra tỡnh trạng thẻ tớn dụng: Quan hệ dependence.
Mỗi HoaDonThanhToanNhanh thừa kế cỏc thuộc tớnh và phương thức của HoaDon và cú thờm cỏc thuộc tớnh, phương thức khỏc: Quan hệ inheritance.
II.3 Một số gợi ý khi thiết kế class
Khai bỏo dữ liệu private: Điều này trỏnh việc truy cập tựy ý từ bờn ngoài lớp
Khởi tạo cho dữ liệu: Cỏc thuộc tớnh nờn được khởi tạo bằng cỏc phương thức constructor khi một đối tượng mới được tạo ra.
Khụng sử dụng quỏ nhiều kiểu dữ liệu cơ bản trong 1 lớp
Khụng phải thuộc tớnh nào cũng cần mutator và accesor: Mỗi thuộc tớnh bao giờ cũng cú một phương thức thiết đặt giỏ trị cho nú gọi là mutator (tiền tố set) và một phương thức lấy ra giỏ trị của nú gọi là accesor (tiền tố get).
Đặt tờn phương thức và thuộc tớnh phản ỏnh theo tớnh chất và nghiệp vụ của nú.
IV. Sử dụng cỏc Class xõy dựng sẵn trong thư viện
Java hỗ trợ cho lập trỡnh viờn một thư viện phong phỳ cỏc lớp đối tượng đó được xõy dựng và thiết kế cẩn thận. Lập trỡnh viờn chỉ cần biết cỏch lấy chỳng ra và sử dụng chỳng theo kịch bản của ứng dụng.
Cỏc gúi thư viện quan trọng của Java 2 bao gồm:
(tham khảo chi tiết tại: http://java.sun.com/j2se/1.4.2/docs/api/overview-summary.html ) Cỏc gúi thường dựng trong Java 2 SE
java.applet Hỗ trợ cỏc class cần thiết cho việc tạo ra cỏc Applet và giao tiếp giữa Applet với mụi trường ngữ cảnh của nú.
java.awt Chứa cỏc lớp dựng để tạo ra cỏc giao diện người dựng và cho cỏc thao tỏc vẽ cỏc hỡnh đồ họa và ảnh.
java.awt.color Cung cấp cỏc lớp cho khụng gian màu.
java.awt.event Cung cấp cỏc giao diện và cỏc lớp cho việc giải quyết cỏc vấn đề về xử lý cỏc sự kiện trờn cỏc thành phần giao diện AWT.
java.awt.font Hỗ trợ cỏc giao diện và lớp liờn quan đến font chữ. java.awt.image Cung cấp cỏc lớp tạo và hiệu chỉnh hỡnh ảnh. java.awt.print Cung cấp cỏc lớp và giao diện cho mục đớch in ấn.
java.beans Chứa cỏc lớp liờn quan tới việc phỏt triển cỏc thành phần (beans) dựa trờn kiến trỳc của Java.
java.io Hỗ trợ cho cỏc thao tỏc vào / ra dữ liệu trờn hệ thống file. java.lang Cung cấp cỏc lớp nền tảng để thiết kế ngụn ngữ lập trỡnh Java.
java.math Hỗ trợ cỏc lớp để thao tỏc và thuật toỏn với cỏc số nguyờn lớn BigInteger và BigDecimal.
java.net Cung cấp cỏc lớp cho việc cài đặt cỏc ứng dụng mạng.
java.rmi Cung cấp cỏc gúi cho lập trỡnh RMI – Remote Method Invocation.
java.security Cung cấp cỏc lớp và giao diện cho việc xử lý cỏc vấn đề an ninh và bảo mật trong Java.
java.sql Cung cấp cỏc hàm API cho việc truy cập vào dữ liệu trong một nguồn dữ liệu – thường là cỏc CSDL quan hệ.
java.text Cung cấp cỏc lớp và giao diện cho việc quản lý text, dates, numbers và cỏc thụng điệp.
java.util Chứa đựng cỏc lớp tiện ớch thuộc nhiều loại khỏc nhau như sinh số ngẫu nhiờn, ngày thỏng,….
javax.crypto Hỗ trợ cỏc lớp và giao diện cho cỏc thao tỏc mó húa dữ liệu. javax.net Cung cấp cỏc lớp cho lập trỡnh mạng.
javax.sql Cung cấp cỏc hàm API cho việc truy cập dữ liệu phớa server.
javax.swing Cung cấp một tập cỏc thành phần được chấp nhận trờn hầu hết cỏc hệ thống mỏy tớnh.
javax.swing.event Hỗ trợ cho cỏc sự kiện kớch hoạt bởi cỏc thành phần của Swing. javax.swing.table Cung cấp cỏc lớp và giao diện làm việc với bảng.
javax.swing.tree Cung cấp cỏc lớp và giao diện làm việc với cõy javax.swing.JTree. javax.xml.parsers Hỗ trợ cỏc lớp cho việc xử lý cỏc tài liệu XML.
Sau đõy là hướng dẫn vớ dụ về sử dụng lớp Date cú sẵn trong thư viện của Java: Khai bỏo biến đối tượng với toỏn tử new
Date myDate = new Date();
Date() là phương thức contructor của class Date. Một đối tượng luụn được tạo ra từ một constructor của lớp đú.
Khai bỏo:
Date myDate;
Xỏc định cho ta một biến đối tượng Date nhưng khụng cho ta một đối tượng Date thực sự vỡ trong thực tế, myDate chưa được cấp phỏt vựng nhớ.
Cõu lệnh:
myDate = new Date();
Xỏc định rằng myDate là một đối tượng thực sự thuộc class Date, ta cú thể ỏp dụng cỏc