Tổng quan về Lập Trình Java

75 394 0
Tổng quan về Lập Trình Java

Đ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

Tổng quan về Lập Trình Java, tài liệu hướng dẫn cơ bản về lập trình, ngôn ngữ lập trình, cũng như các thuật toán lập trình, cùng với ngôn ngữ lập trình Java, tài liệu chi tiết, dành cho các bạn nghiên cứu ,học tập về Java

Chơng I lập trình là gì ? Đối với đại đa số mọi ngời, hình ảnh về chiếc máy tính hiện ra nh một trò ma thuật. Đó là một thế giới quyền lực vô hình và thờng đợc cảm nhận nh một thực thể toàn năng có khả năng, với một chút tác động của con ngời, trả lời cho những diễn biến th- ơng mại, chính trị, khoa học, và rất nhiều phơng diện khác trong cuộc sống của chúng ta. Những chiếc máy tính làm gợi nhớ sự lo ngại không quen thuộc; những lầm lỗi của con ngời thờng đợc che giấu bằng những lời nguỵ biện tỷ nh máy tính đã nghỉ hoặc đó phải là sai sót của máy tính. Song le, một chiếc máy tính thì không có gì hơn là một tập hợp vô hồn các dây nhợ và thành phần silicon đợc tổ chức nh thế nào đó sao cho nó có thể thực hiện nhanh chóng những thao tác đơn giản nh cộng hai con số với nhau. Thế thì làm thế nào nó có đợc sức mạnh ghê gớm nh vậy ? Bàn tay tài ba nào đã biến tập hợp những thành phần điện tử này thành một công cụ vạn năng ? Lập trình chính là để thực hiện trò ma thuật đó. Một chơng trình là một tập hợp các hớng dẫn (directions) chính xác những việc cần làm cho máy tính; nh vậy chơng trình là phơng tiện trung gian đợc dùng để giao tiếp với máy tính. Các chơng trình có thể đợc viết trên nhiều ngôn ngữ lập trình (programming languages)- những ngôn ngữ đặc tả các hớng dẫn cho máy tính. Trong cuốn sách này chúng ta sử dụng ngôn ngữ Java. Công việc trớc tiên khi lập trình là phải sáng sủa hoá bài toán tới mức có thể. Chính xác yêu cầu của bài toán là gì ? Nó có thể đợc chia thành những vấn đề nhỏ hơn để dễ quản lý ra sao ? Thuật toán nào đợc dùng để giải quyết ? Cách cài đặt thuật toán vào chơng trình ? Chơng trình có làm việc hay không ? Cách trình bày đã trong sáng hay cha ? Có nhanh không ? Có dễ thay đổi khi cần thiết ? Có yêu cầu quá nhiều tài nguyên của hệ thống ? Đó là những thách thức đối với các lập trình viên- những ngời thiết kế và viết chơng trình. Con chuột máy trong mê cung Chúng ta bắt đầu bài học bằng một bài toán nhỏ chứa những yếu tố cơ bản của bất kỳ một đề án lập trình nào: thực hiện những chỉ thị (instructions) lên một con chuột máy để giúp nó thoát khỏi một mê cung. ở đây, mê cung là một khu hình chữ nhật đợc bố trí các phòng hình vuông trong đó; hai phòng kề nhau có thể đợc ngăn cách bởi một bức tờng hoặc mở thông với nhau. Chúng ta đặt con chuột ở lối vào mê cung với một đ- ờng kẻ đậm mô tả các bức tờng, và đờng chấm chấm mô tả đờng thông qua. Con chuột cũng giống nh một chiếc máy tính, nó chỉ biết làm theo những chỉ thị đơn giản xác định nào đó: step forward đi vào phòng tiếp theo, turn right rẽ phải, turn left rẽ trái. Chúng ta phải lập trình cho nó bằng cách viết tỉ mỉ các chỉ thị mà nó phải làm theo để thoát ra ngoài mê cung. Với trờng hợp đơn giản này, các chỉ thị sẽ là: Máy tính và ngôn ngữ lập trình Những chiếc máy tính mà bạn sẽ học cách lập trình cho chúng cũng giống nh lũ chuột máy ở trên. Chúng hiểu cách đáp lại một danh mục các chỉ thị đơn giản gọi là tập lệnh (instruction set). Công việc viết một chơng trình là diễn đạt cách giải quyết bằng thuật toán cho một vấn đề bằng tập lệnh máy tính. Đơng nhiên, tập lệnh của các máy tính thì phức tạp hơn tập các chỉ thị chuột rất nhiều. Các tập lệnh thay đổi qua các máy khác nhau, song chúng đều có những điểm chung sau: Chúng có thể thực hiện đợc những thao tác số học đơn giản trên số nguyên và số thập phân; có khả năng lu giữ các kết quả trung gian tạm thời. Chúng có những thuận lợi khi làm việc với các chuỗi chữ cái, ký hiệu, số; và có thể so sánh bằng nhau hay tơng đơng. Chúng có khả năng nhận thông tin (input) từ những nguồn dữ liệu nh bàn phím, đĩa từ, điện thoại, băng từ hay các máy tính khác; có khả năng gửi thông tin (output) tới những thiết bị nh máy đầu cuối, máy in, đĩa, băng từ hay các máy tính khác. Cũng nh việc kết hợp các chỉ thị đơn giản có thể đa chú chuột máy thoát khỏi một mê cung, một sự phối hợp thông minh các chỉ lệnh đơn giản của máy tính có thể thực hiện đợc những công việc phức tạp nh thể là chúng có phép lạ vậy. u thế lớn của máy tính là có thể thực thi với tốc độ vài triệu chỉ lệnh trên một giây. Dù cho khi nó thực hiện những lệnh đơn giản, việc thi hành đợc thực hiện quá nhanh và kết quả có thể tinh vi đến mức đáng ngạc nhiên. Trong thời thơ ấu của máy tính, các chơng trình đợc viết bởi những tập lệnh đơn giản này- đợc gọi là ngôn ngữ máy (machine language). Ngày nay, chúng ta sử dụng một ngôn ngữ lập trình mức cao (high- level programming languages), giống nh ngôn ngữ mà chúng ta đã dùng để lập trình cho chú chuột máy, và máy tính sẽ tự động chuyển đổi kết quả thành ngôn ngữ riêng của nó để thực thi. Có nhiều ngôn ngữ lập trình mức cao. Java là một trong số đó; các ngôn ngữ khác nh BASIC, C++, Pascal, Tất cả chúng đều chia sẻ một tính chất quan trọng, cũng giống nh ngôn ngữ của chuột máy, rằng các ngôn ngữ phải đợc sử dụng theo những quy tắc chặt chẽ. Điểm khác biệt với ngôn ngữ tự nhiên, với tính đa nghĩa và tinh tế của nó, là các ngôn ngữ lập trình đều không mềm dẻo; và giao tiếp với máy tính là công việc vất vả nhất cho những lập trình viên mới vào nghề. Java đợc thiết kế đặc biệt để lập trình an toàn trên Internet, và nó nhanh chóng trở nên đợc a chuộng tuyệt đối. Java cũng là một ngôn ngữ rất giàu có, vì thế những bài học để nắm vững ngôn ngữ này sẽ gắn với việc lập trình trên bất kỳ một ngôn ngữ nào mà bạn đã nói lời từ biệt. Hơn nữa, với tính năng lập trình an toàn, Java giúp ngời mới học tránh đợc những cạm bẫy thờng có trong các ngôn ngữ khác. Cuối cùng, lập trình trên Java, đặc biệt là cho các trình duyệt Internet, là rất lý thú! Nhiều ví dụ trong cuốn sách này kéo theo những chơng trình mà bạn có thể đa vào những trang Web của mình để cả thế giới cùng thởng thức! Chơng trình và thuật toán Ví dụ về chú chuột máy đã chỉ ra một cách rõ ràng rằng, trớc khi bắt đầu viết một chơng trình (trên Java hay bất kỳ một ngôn ngữ nào khác), bạn cần phải hiểu đích xác bạn muốn chơng trình đó làm cái gì và làm nh thế nào. Trừ khi bạn đã nghiên cứu kỹ l- ỡng thuật toán, còn thì việc viết một chơng trình chắc chắn sẽ là một thảm hoạ, và trong trờng hợp tồi nhất là không thể thực hiện đợc. Trong cuốn sách này chúng tôi sẽ hớng dẫn bạn cách thiết kế các thuật toán và đa chúng vào Java. Có ba công việc riêng rẽ ở đây: học ngữ pháp và cú pháp Java, học những kinh nghiệm đầu tiên đợc bàn luận về kiểu mẫu viết chơng trình, học cách thiết kế và thực hiện các thuật toán. Trớc tiên, viết những chơng trình theo đúng cú pháp d- ờng nh là công việc khó khăn nhất. Viết những chơng trình đúng cú pháp là vấn đề quan trọng trong việc nắm bắt tập các quy tắc về ngữ pháp. Sử dụng thành thạo cú pháp Java là việc rất khó bởi vì máy tính là thứ hoàn toàn không khoan nhợng đối với bất kỳ một sai sót nào. Việc viết chơng trình sử dụng một kiểu mẫu tốt là một công việc khó bởi vì có rất ít những quy tắc tuyệt đối mà hầu hết là những nguyên lý chung thờng đợc sử dụng. Tính tổ chức, sự tỉ mỉ, sự nhạy bén mang tính kinh nghiệm và một chút óc sáng tạo là những yếu tố cần thiết để viết một chơng trình kiểu mẫu. Cuối cùng, sau khi bạn đã làm chủ đợc những rắc rối về mặt ngôn ngữ, thì công việc thứ ba của chúng ta- thiết kế và thực thi những thuật toán- là nhiệm vụ mang tính thách thức nhất, thú vị nhất và quan trọng nhất. Nó đòi hỏi tài năng và những kỹ xảo trong giải quyết vấn đề. Trong cuốn sách này bạn sẽ đợc học nhiều những kỹ thuật mà thờng là có thể tìm thấy sự phối hợp của chúng trong những công việc khác nhau. ứng dụng và Applet Trong Java, bạn có thể viết hai kiểu chơng trình phân biệt: các ứng dụng và các Applet. Các ứng dụng (applications) là những chơng trình đứng một mình và chạy trên máy tính riêng của bạn. Chúng không khác gì với những kiểu chơng trình mà bạn có thể viết trên các ngôn ngữ lập trình khác, nh C++ hay BASIC. Các ứng dụng này có thể đọc và thao tác dữ liệu lu trên đĩa của máy tính, cũng nh dữ liệu mà bạn gõ vào từ bàn phím. Chúng cũng có thể ghi dữ liệu vào đĩa, hiển thị ra màn hình, và in ra máy in. Không giống với các ứng dụng, các Applet đợc thực thi trong một trình duyệt, nh Netscape Communicator hay Suns HotJava. Các Applet điển hình là cho phép ngời sử dụng điều khiển sự thực thi thông qua một giao diện đồ họa ngời sử dụng (Graphical User Interface- GUI), đó là một tuyển tập các thành phần (components) nh button và scrollbar trong một cửa sổ. Một khi bạn đã viết một Applet, bạn không chỉ có thể thực thi nó trong trình duyệt của mình, mà còn có khả năng thực thi trên những trình duyệt khác, của những ngời khác. Tơng tự, bạn có thể thực thi những Applet mà những lập trình viên khác phát triển. Khả năng này thực sự đã đ World Wide Web vào cuộc sống của chúng ta. Chúng tôi sẽ hớng dẫn bạn cách làm thế nào để viết các ứng dụng và các Applet. Viết các Applet thì khoái hơn, nhng các ứng dụng thì lại giống hơn với các ngôn ngữ lập trình truyền thống nh BASIC. Trong mọi trờng hợp, sự khác biệt giữa chúng chủ yếu chỉ mang tính hình thức; cái khó khi viết một chơng trình vẫn là công việc thiết kế thuật toán cơ sở của nó. Biên dịch và thông dịch# Hãy nói về cơ chế. Sau khi thiết kế và viết chơng trình ứng dụng hay applet trên giấy, bạn bắt đầu tiến hành gõ nội dung của nó vào một file trên máy tính và gỡ rối (debugging) cho nó loại trừ những lỗi có thể gặp trong giai đoạn lập trình. Một file đợc hiểu tơng tự nh là một thùng chứa điện tử mà ở đó các thông tin nh văn bản, dữ liệu hay các chơng trình có thể đợc lu trữ. Việc soạn thảo và sửa chữa chơng trình của bạn trên máy tính đợc thực hiện thông qua một trình soạn thảo (editor), một chơng trình đợc hỗ trợ có khả năng hiểu những chỉ thị nh chèn và xoá các dòng ký tự, di chuyển chúng qua lại, và tìm kiếm những mẫu tự đặc biệt. Các trình soạn thảo cho phép lu và phục hồi dữ liệu thông qua đĩa (disk), một thành phần nhớ chính của máy tính. Học cách sử dụng một trình soạn thảo sẽ giúp bạn tiến hành viết và gỡ rối chơng trình đợc dễ dàng hơn. Nhớ rằng chơng trình mà bạn viết và gõ vào máy tính là chơng trình Java, một ngôn ngữ lập trình mức cao, cho phép các lập trình viên diễn giải những t tởng của anh ta theo những thuật ngữ phức tạp nhng trong sáng và dễ thể hiện. Những ví dụ khác về ngôn ngữ lập trình mức cao là BASIC, Pascal, và C++. Hầu hết các ngôn ngữ mức cao đều cần phải đợc chuyển đổi thành một ngôn ngữ cơ sở hơn có khả năng đợc thực thi trực tiếp bởi phần cứng máy tính. Java khác với đa số các ngôn ngữ lập trình mức cao. Bởi vì một trong các mục tiêu của Java là đạt tới khả năng độc lập phần cứng (platform- independence), Java sẽ không đợc chuyển đổi thành một ngôn ngữ mã máy cụ thể nào. Thay vì nh vậy, Java đợc chuyển đổi thành một ngôn ngữ trung gian gọi là Java Bytecode. Các Java Bytecode sau đó đợc thông dịch theo cùng một phơng pháp chính xác trên tất cả các máy tính, vì vậy một chơng trình Java sẽ làm những công việc giống nhau cho dù nó đợc chạy trên một máy IBM PC, Apple Macintosh, hay bất kỳ một máy tính nào khác. Khi đã có một file chơng trình chứa mã Java, bạn sẽ dùng hai chơng trình khác đ- ợc hỗ trợ sẵn: một trình biên dịch (compiler) có nhiệm vụ chuyển đổi chơng trình của bạn thành một chơng trình theo ngôn ngữ Java Bytecode, và một trình thông dịch (interpreter), để thực thi các Java Bytecode này. Một tính năng đặc biệt hấp dẫn của Java là rất nhiều các trình duyệt Internet hiện đại đều có kết hợp với những trình thông dịch Java. Những bớc thực hiện mà bạn phải làm để biên dịch và chạy chơng trình Java của bạn phụ thuộc vào hệ thống mà bạn đang sử dụng và chơng trình của bạn là một ứng dụng hay một Applet. Trờng hợp đơn giản nhất là khi bạn viết một ứng dụng (stand- alone program) trên một hệ thống hớng dòng lệnh (command-oriented systems), nh DOS hay UNIX. Trong trờng hợp này, bạn dể chơng trình của mình trong một file có tên là whatever.java (whatever có thể là bất kỳ, nhng java phải là java). Gõ dòng lệnh: java whatever.java để biên dịch chơng trình. Sau đó gõ: javac whatever để chạy. Nhớ rằng, trớc tiên bạn phải biên dịch chơng trình. Sau đó bạn có thể chạy nó bao nhiêu lần tùy thích. Nếu chơng trình của bạn có lỗi cú pháp (syntactic errors, grammatical errors), nghĩa là khi có những quy tắc văn phạm của Java không đợc tôn trọng, công việc biên dịch chơng trình thành các Bytecode không thể hoàn thành, và trình biên dịch sẽ cảnh báo cho bạn thờng là bằng những thông báo cộc lốc và hết sức không thân thiện. Bạn phải tìm xem chỗ nào trong chơng trình cần phải thay đổi và dùng trình soạn thảo để sửa lỗi, sau đó cố gắng biên dịch lại. Bạn có thể sẽ mất một vài lần sửa chữa để việc biên dịch thành công. Song le, một chơng trình đợc biên dịch thành công (không có lỗi) thì cha đủ đảm bảo để chơng trình có thể làm việc một cách đúng đắn. Có thể bạn đã viết những đoạn mã rất đúng cú pháp nhng chơng trình lại không làm việc chính xác nh bạn mong đợi. Những lỗi nhận đợc trong quá trình thực hiện chơng trình đợc gọi là các lỗi logic (logic errors hay run-time errors); cũng nh các lỗi cú pháp, chúng cần đợc sửa chữa lại. Các lỗi logic có thể đợc phát sinh do đơn giản là một lỗi đánh máy hay do sai lầm trong thuật toán. Lập trình hớng đối tợng: thăm lại chú chuột trong mê cung Java có những tính năng đáng ca ngợi. Trung tâm của những tính năng này đó là Java là một ngôn ngữ hớng đối tợng (object - oriented language). Điều này có nghĩa là Java cổ vũ thậm chí ép buộc mô hình lập trình hớng đối tợng (OOP Object - Oriented Programming.) OOP là một cách nghĩ trong giải quyết vấn đề một kiểu mẫu (paradigm) lập trình. Trong OOP, một chơng trình đợc xem xét nh là một tập các đối tợng (objects) tơng tác lẫn nhau bằng cách gửi các thông điệp (messages) cho nhau. Chẳng hạn, sử dụng OOP, chúng ta sẽ tiếp cận chú chuột máy của chúng ta theo cách sau đây. Mê cung và chuột mỗi thứ là một đối tợng. Một đối tợng thứ ba gọi là quan sát viên (observer)- có nhiệm vụ hiển thị cấu trúc của mê cung trên màn hình máy tính và chỉ ra con đờng mà chú chuột đã dùng để tẩu thoát khỏi mê cung. Để quan sát viên có thể hiển thị cấu trúc mê cung, nó phải có khả năng nhận ra những bức tờng đợc sắp xếp ở trong đó. Thông tin này thu đợc bằng cách gửi thông điệp tới mê cung nhớ rằng mê cung là một đối tợng - , hỏi nó, với mỗi một căn phòng xác định phải chăng có một bức tờng chắn ở các hớng Bắc, Nam, Tây, Đông. Bằng cách hỏi han có hệ thống về các phòng, quan sát viên có thể vẽ kiến trúc mê cung lên màn hình. Thêm vào đó, quan sát viên sẽ gỉ thông điệp tới chuột máy, hỏi xem di chuyển tiếp theo của nó là gì, và sử dụng câu trả lời để tái hiện con đờng thoát khỏi mê cung. Nh chúng ta đã biết, chuột máy phải có khả năng xác định xem có phải nó đang đối diện với một bức tờng hay không. Để làm điều này, chuột ta phải biết đợc phơng h- ớng hiện tại của nó (Bắc, Nam, Tây, Đông) và nó đang ở tại vị trí nào trong mê cung. Sử dụng các thông tin này, nó sẽ gửi một thông điệp tới mê cung, hỏi xem phải chăng có một bức tờng đang nằm ở hớng đó của căn phòng đó. Cả ba đối tợng nói trên phải có một cách nào đó để gọi tên các phòng trong mê cung. Chẳng hạn có thể đánh số các phòng bởi một cặp số nguyên (cột, hàng) chỉ ra số hiệu cột và hàng của phòng. Chúng ta thử quan sát giải pháp OOP này. Mê cung phải đợc chuẩn bị để nhận các thông điệp nh Cho tớ biết, mê cung, có phải có một bức tờng hớng Đông ở căn phòng (3, 2) ? Đơng nhiên, khi chúng ta viết thông điệp này trên Java, nó sẽ ngắn gọn hơn rất nhiều tỷ nh checkWall (EAST, 3, 2. Mê cung có thể trả lời đúng hoặc sai. Việc đặc tả cách ứng xử (behavior) của mê cung liên quan tới sự mô tả chi tiết những kiểu thông điệp mà mê cung có thể đáp lại. Đặc tả này đợc gọi là một giao diện (interface). Một giao diện mô tả tất cả mọi thứ về mê cung mà thế giới bên ngoài cần phải biết để tơng tác với nó. Tuy nhiên, giao diện lại không đề cập gì đến cách mà đối t- ợng thực sự đợc thực thi. Đó là che giấu thông tin (information hiding) một trong những đặc tính của OOP. Một ví dụ về đối tợng mouse đợc cho trên hình 1.2. Chú chuột phải đặc tả giao diện của nó. Trong chơng trình đơn giản của chúng ta, chú chuột phải đáp lại một thông điệp hỏi: Cho tớ biết, chuột máy, di chuyển tiếp theo của cậu là gi ?, hoặc ngắn gọn hơn, tellMove (). Chuột ta sẽ trả lời Bắc, Nam, Tây, hoặc Đông. (Quan sát viên, kẻ gửi thông điệp này, có thể sẽ phải thực hiện một kiểm tra kép để chắc chắn rằng con chuột ranh mãnh không cố gắng để đào tẩu qua một bức tờng!). Chú ý rằng chuột máy phải chứa trong nó thuật toán thực sự mà chúng ta đã khai thác ở phần trớc, song cả mê cung lẫn quan sát viên đều không thể nhìn thấy thông tin đợc che giấu này. Tất cả những gì chuột ta cần dùng để khám phá ra con đờng tẩu thoát đợc mã hóa bên trong đối tợng mouse. Sự phá phách của lũ chuột Tính trừu tợng Giả sử chúng ta muốn cho thông qua mê cung hai con chuột khác nhau một con bắt đầu tại một cửa mở trong mê cung và con còn lại tại cửa mở đối diện. Chúng ta Move one step Move one step Where are you ? Where are you ? Where I am: (3,2) Where I am heading: North Where I am: (3,2) Where I am heading: North Hình 1.2: Một thể hiện của lớp Mouse. giả thiết rằng lũ chuột có thể trèo qua nhau kho chúng tìm đờng thoát khỏi mê cun. Mỗi con chuột là một đối tợng riêng biệt và mỗi một trong chúng có thể ở tại những địa điểm khác nhau trong những thời điểm khác nhau. Tuy nhiên, mỗi con chuột đều có cách ứng xử trừu tợng (abstract behavior) giống nhau. Cách ứng xử chung này đợc đặc tả trong Java bởi giao diện chung của lũ chuột. Khái niệm về một lớp (class) đơn giản là một giao diện cùng với sừ thực thi chi tiết của giao diện đó. Mỗi đối tợng chuột đợc gọi là một thể hiện (instance) của lớp. Tên của một thể hiện đợc dùng khi gửi thông điệp tới đôí tợng đó. Chẳng hạn, nếu gọi tên của lũ chuột là speedy và greedy, quan sát viên có thể hỏi về di chuyển tiếp theo của speedy bằng cách gửi thông điệp speedy.tellMove(). Quan hệ giữa lớp Mouse và hai thể hiện của nó đợc minh hoạ trên hình 1.3. Bạn có thể tự hỏi liệu OOP có thể dung nạp nhiều hơn một loại chuột hay không. Câu trả lời là có thể. Trong trờng hợp này, một số cách ứng xử của hai loại chuột có thể tơng tự nhau, thậm chí chúng có thể có những giao diện giống nhau. Tuy nhiên, có những sự thực thi khác nhau trong những phần của giao diện, và kết quả là những cách ứng xử khác nhau. Trong OOP tính năng này gọi là sự chuyên biệt hoá (specialization), và nó đợc hỗ trợ bởi những cơ chế OOP quan trọng của lớp con và tính kế thừa. Các chủ đề này sẽ đợc xem xét đầy đủ ở chơng 12. Cuối cùng, đôi khi các thông điệp đợc gửi tới không chỉ những thể hiện của lớp mà là chính bản thân lớp đó. Chẳng hạn, chúng ta có thể yêu cầu lớp Mouse lu giữ thông tin về số thể hiện đã đợc tạo ra, và chúng ta sẽ hỏi số lợng này bằng thông điệp Mouse.tellHowMany(). Một cách tơng tự, lớp có thể lu giữ những thông tin về cấu tạo bên trong của nó (vì vậy là cấu tạo của tất cả các thể hiện của nó.) Chẳng hạn, lớp Mouse có thể chỉ ra rằng các thể hiện của nó đều có bốn chân, trong khi lớp Chimpanzee (Tinh tinh) thì có hai chân. Với ý nghĩa này, lớp đóng vai trò nh là một hoạ đồ của các thể hiện. Tại sao phải lập trình hớng đối tợng ? Nếu bạn đã từng lập trình trên BASIC, một ngôn ngữ rất phổ biến cho ngời mới học, thì việc tán chuyện về những thứ nh lớp và đối tợng dờng nh là một công việc quá vô bổ chỉ để hoàn thành một nhiệm vụ giản đơn. Tại sao lại có sự phiền phức này ? Câu trả lời đã đợc chúng đề cập ở phần đầu của chơng này: Chúng ta cần viết những chơng trình dễ đọc và dễ thay đổi. Lập trình hớng đỗi tợng là một cách cấu trúc hoá chơng trình để đáp ứng những tiêu chuẩn này. Đặc biệt, các lớp, đôí tợng, giao diện và tính năng che giấu thông tin cho phép từng phần trong chong trình có thể đợc viết và sửa đổi một cách độc lập, một u điểm vô giá khi viết những chơng trình lớn. Với những chơng trình đồ sộ 100.000 dòng hoặc hơn điều này gần nh là bắt buộc. Chơng II những thành phần cơ bản của Java Trong chơng này chúng ta sẽ bàn luận về những thành phần cơ bản của một chơng trình Java. Một chơng trình có thể đợc đọc và hiểu sâu sắc thậm chí bởi những ngời cha hề biết lập trình, nh là đọc và hiểu một câu truyện ngắn hay một bài thơ vậy. Thực ra, b- ớc đầu tiên để học viết một chơng trình là học cách đọc chúng. Nếu chơng trình là đơn giản và đợc tổ chức tốt, việc thởng thức nó quả thật rất thú vị. Hai chơng trình đơn giản Chúng ta bắt đầu bằng hai chơng trình hoàn thiện song rất đơn giản. Đây là những chơng trình ứng dụng đúng hơn là những applet, nghĩa là chúng có thể chạy bên ngoài một trình duyệt Web. Cũng nh tất cả các ứng dụng trong cuốn sách này, chúng đợc kích hoạt bởi một dòng lệnh, input (từ) và output (ra) cửa sổ lệnh (command windows). Chú ý rằng nếu bạn đang sử dụng một môi trờng phát triển tích hợp (IDE), nh mô tả ở chơng I, các phơng thức kích hoạt chơng trình của bạn sẽ theo một cách khác. 1. class Hello 2. 3. { 4. // Display Hello Message 5. 6. public static void main(String[] args) 7. { 8. System.output.println("Hello"); 9. } 10. } Bạn phải gõ chơng trình này vào trong một file có tên Hello.java (các chữ thờng và chữ hoa là rất quan trọng). Sau đó bạn biên dịch chơng trình bằng dòng lệnh: javac Hello.java Mỗi lớp yêu cầu một file độc lập. Java hạn chế rằng tên mà bạn dùng theo sau từ khoá class phải đợc dùng nh là tên cơ sở của file chứa chơng trình đó. Phần mở rộng của file là .java. Nên nhớ việc tên của lớp và của file chơng trình phải hoàn toàn giống nhau, kể cả cách viết hoa và thờng. Bạn chạy chơng trình bằng dòng lệnh: java Hello Sau khi biên dịch và chạy, chơng trình sẽ hiển thị thông điệp: Hello! trên màn hình cuối. Chúng ta hãy xem xét từng phần của chơng trình này một cách độc lập với nhau. Trớc tiên, các chữ số thứ tự dòng không thuộc nội dung của chơng trình (vì thế bạn không gõ chúng vào chơng trình trên đĩa để chạy); chúng chỉ đợc sử dụng để tiện cho việc tham chiếu của chúng ta. Các dòng trắng (2 và 5) có thể bỏ qua. Dòng 4 là dòng chú thích (comment). Các dòng chú thích bắt đầu bởi hai dấu slash, //, đợc dùng để giải thích cho những ngời đọc mã chơng trình, máy tính sẽ bỏ qua chúng. Nh vậy, khu vực thực thi của chơng trình bao gồm các dòng 1, 3, 6, 7, 8, 9, 10. Dòng 1 gọi là tiêu đề lớp (class heading) cần phải có ở đầu tất cả các chơng trình: nó bao gồm từ khoá class và tên của lớp (phải giống với tên của phần đầu file chơng trình.) Dòng 6 gọi là method heading giới thiệu phơng thức (hoặc hàm) duy nhất của chơng trình tên là main. Một phơng thức tên main đại diện cho những thao tác chính của ứng dụng là những gì đợc thực thi khi chơng trình chạy. Phần heading method này sẽ luôn luôn xuất hiện chính xác nh trên trong tất cả các ứng dụng của bạn. Dòng mã: System.out.println("Hello!"); gửi các ký tự H, e, l, l, o, ! liên tiếp nhau để hiển thị trên màn hình cuối, tạo ra thông điệp chào mừng mong đợi. Phơng thức này sau đó phát sinh một ký tự newline có tác dụng nh một dấu xuống dòng. Ký tự này không thực sự hiển thị trên màn hình máy tính, song nó định vị output cursor (con trỏ) tại vị trí đầu tiên của dòng tiếp theo. Dòng 9 và 10 tuy rằng rất đơn giản song không có chúng trình biên dịch sẽ phát sinh lỗi. Chú ý rằng dòng 3 và 7 chứa các dấu ngoặc mở (opening brace {). Dòng 9 và 10 chứa các dấu ngoặc đóng (closing brace - }) tơng ứng. Chính xác hơn, các dấu ngoặc ở các dòng 3 và 10 tơng ứng với nhau, thể hiện rằng các dòng mã đợc bao giữa chúng (từ dòng 4 đến dòng 9) là thành phần của lớp Hello. Cũng vậy, các dấu ngoặc ở các dòng 7 và 9 tơng ứng với nhau, thể hiện rằng các dòng mã đợc bao giữa chúng(dòng 8) là thành phần của phơng thức main. Chú ý cách mà các dấu ngoặc đợc đặt lồng nhau: toàn bộ phơng thức main đợc chứa trong lớp Hello. Chúng ta sẽ đợc xem cách sắp xếp lồng nhau này để một phần của chơng trình chứa các thành phần khác sử dụng các dấu ngoặc bao. Bây giờ, hãy xem xét một chơng trình nhận thông tin vào từ ngời sử dụng. Nó sẽ hỏi ngời sử dụng một nhiệt độ ở thang đo Fahrenheit và chuyển đổi thành nhiệt độ Centigrade. Chúng tôi muốn có một hội thoại tơng tự nh sau: Please type the temperature (deg F): 68 68 deg F is 20.0 deg C Câu trả lời của ngời sử dụng đợc hiển thị tiếp sau lời mời vào dữ liệu. 1 class Temperature 2 { 3 // chuyển đổi nhiệt độ từ thang đo F sang C 4 5 public static void main (String[] args) 6 { 7 int temperature; 8 System.out.print("Please type the temperature (deg F):"); 9 temperature = Keyboard.readInt(); 10 System.out.print(temperature); 11 System.out.print(" deg F is "); 12 System.out.print((5.0 * (temperature 32.0)) / 9.0); 13 System.out.println(" deg C"); 14 } 15 } Bây giờ, chơng trình đợc chứa trong file Temperature.java, là tên của lớp mà chúng ta định nghĩa. Phần đầu của chơng trình và các lời chú thích tơng tự nh chơng trình Hello. Tuy nhiên sự phức tạp nằm ở phần thân chính của chơng trình từ dòng 7 đến dòng 13. Phần làm việc của chơng trình là từ dòng 7 đến dòng 13. Dòng 7 là một mô tả (declararion) chỉ ra rằng chơng trình sẽ sử dụng một biến tên là temperature; biến này, nh chúng ta sẽ thấy, dùng để chứa dữ liệu vào của ngời sử dụng. Phần làm việc chính của chơng trình đợc thực hiện bởi sáu điều lệnh khả thi (executable statement) ở các dòng từ 8 đến 13. Chơng trình sau khi biên dịch sẽ thực thi các điều lệnh này chỉ đơn giản là làm theo những gì chúng chỉ dẫn lần lợt từng lệnh một. Nói chung tất cả các chơng trình Java đều đòi hỏi các mô tả và các điều lệnh khả thi để thực hiện trong thời gian chay. Trong chơng trình này, sáu điều lệnh chỉ dẫn làm hai kiểu công việc: gửi các ký tự ra màn hình cuối (các dòng 8, 10, 11, 12, 13) và nhận dữ liệu vào từ ngời sử dụng (dòng 9). Dòng 8 đợc thực hiện trớc tiên, in ra một lời mời yêu cầu ngời sử dụng nhập dữ liệu. Sau đó dòng 9 đợc thực hiện, khiến máy tính tạm thời chờ ngời sử dụng gõ vào một số (và phím Enter). Số này đợc lu trong biến temperature. Trong ngôn ngữ Java, chúng ta nói rằng giá trị này đợc gán nh là một giá trị của biến temperature, hay đơn giản là đợc gán cho biến temperature. Định danh tợng tr- ng temperature đợc mô tả bởi điều lệnh ở dòng 7. Các dòng10 và 11 đợc thực hiện tiếp theo. Dòng 10 in ra gía trị đã đựơc gán cho biến temperature. Tiếp theo là dòng 12. Nó lấy giá trị gọi là temperature và thực hiện một vài thao tác số học để tính ra giá trị nhiệt độ C tơng ứng. Chú ý rằng phơng thức print làm việc giống với phơng thức println, ngoại trừ việc nó không tự động xuống dòng. Vào ra đơn giản Cách xử lý hiển thị dữ liệu, đa ra máy in hoặc trên màn hình máy tính, đợc gọi là output. Trong Java phơng thức System.out.print() và System.out.println() là những cách đơn giản nhất để sản sinh output: Chúng hiển thị các ký tự trên màn hình, thờng đợc tham chiếu nh là một stdout, dòng ra chuẩn (standard output stream) hay console. Trong chơng trình ở trên, dòng mã: System.out.print("deg F is"); chỉ thị cho máy tính in ra văn bản nằm giữa hai dấu nháy, kể cả khoảng trống, đó là: deg F is Chúng ta muốn rằng dữ liệu ra đợc hiển thị kế tiếp nhau trong cùng một dòng, vì thế chúng ta sử dụng phơng thức print chứ không phải println. Cũng trong chơng trình trên, dòng mã: System.out.print(temperature); chỉ thị cho máy tính in ra giá trị của biến Temperature. Có thể kết hợp hai dòng mã trên trong cùng một dòng: System.out.print(temperature + "deg F is"); Dấu + trong lệnh trên có tác dụng nh một tác tử nối kết (concatenation operator), sẽ đặt giá trị của biến temperature và chuỗi deg F is kề nhau. Tuy rằng xuất dữ liệu trong Java đợc thực hiện một cách dễ dàng, việc vào dữ liệu (input) không hẳn cũng đơn giản nh thế. Java không cung cấp một phơng thức đơn giản nào để nhận dữ liệu khi nó đợc gõ vào bởi một ngời ngồi trớc bàn phím máy tính. (Thực ra, có những cách nhận dữ liệu input đơn giản từ ngời sử dụng trong các Applet mà bạn sẽ đợc thấy ở chơng III.) Để đơn giản hóa vấn đề, chúng ta đã viết những phơng thức để nhận dữ liệu từ bàn phím. Chúng ta sẽ sử dụng phơng thức Keyboard.readInt() để nhận một số nguyên là giá trị đợc gõ vào từ bàn phím; sử dụng phơng thức Keyboard.readDouble() để nhận một số thập phân. Bạn sẽ không thể hiểu đợc mã của các phơng thức này cho tới khi bạn biết thêm nhiều điều về Java; mã đầy đủ của chúng đợc cho ở phụ lục D.7. Dòng mã: temperature = Keyboard.readInt(); sẽ khiến chơng trình dừng lại và đợi ngời sử dụng gõ một số từ bàn phím rồi sau đó gán số đọc đợc cho biến temperature. Đơng nhiên, trớc khi nhận dữ liệu, chúng ta có một lời mời (prompting) tới ngời sử dụng: System.out.print("Please type the temperature (deg F): "); [...]... lớp Label và phơng thức add Các lớp và phơng thức đợc cung cấp cùng với trình biên dịch Java (hay bất kỳ trình biên dịch của bất kỳ ngôn ngữ nào) đợc gọi là giao diện lập trình ứng dụng (API Application Programming Interface) Trong mọi trờng hợp, chúng đợc cung cấp để hỗ trợ cho việc lập trình các chơng trình ứng dụng và các Applet Java API gồm có một tập hợp rất lớn các lớp (vài trăm), mỗi lớp với nhiều... trờng hợp này là có kiểu trả về là void Sự phân biệt giữa hai trờng hợp là rất quan trọng Một lời gọi tới một phơng thức không có gía trị trả về (void) lập thành một điều lệnh Java và có thể đợc thực thi trong bất kỳ một ngữ cảnh (context) nào mà một điều lệnh Java có thể đợc sử dụng Một lời gọi tới một phơng thức có trả về một giá trị lập thành một giá trị của kiểu trả về bởi phong thức (int, double,... thiệu tóm tắt về đối tợng và những vấn đề liên quan thiết nghĩ là cần thiết Mục đích của chúng ta ở đây là củng cố hơn nữa các khái niệm về lập trình hớng đối tợng đã đợc đề cập ở chơng I và nắm đợc một vài ký hiệu của Java Đừng lo lắng nếu bạn không thể hiểu hết mọi phơng diện integer, double, Chúng ta đã biết đến khái niệm lớp Mỗi chơng trình mà chúng ta đã viết là một lớp Các chơng trình này, đơng... phần nhỏ này, sau đó tập hợp chúng lại thành một chơng trình duy nhất Đóng gói trong Java là một kỹ thuật mạnh tuyệt đối Lập trình hớng đối tợng Lập trình hớng đối tợng hỗ trợ một cách nhìn về những chơng trình nh là tập hợp của những đối tợng tơng tác lẫn nhau Quan điểm nền tảng về một đối tợng là nó đợc bao gồm bởi những giá trị gọi là các thuộc tính (atributes) hoặc biến thể hiện (instance variables),... trình nhỏ cũng đầy rẫy những khó khăn và nguy cơ thất bại Hãy hình dung sự phức tạp trong những chơng trình đồ sộ! Đừng tuyệt vọng: Công việc viết những chơng trình dài hơi có thể đợc xử lý khôn khéo bằng cách bẻ một bài toán lớn thành những phần nhỏ hơn, viết và gỡ rối cho các phần nhỏ này, sau đó tập hợp chúng lại thành một chơng trình duy nhất Đóng gói trong Java là một kỹ thuật mạnh tuyệt đối Lập. .. dịch) Java API bao gồm khoảng hơn 20 gói Chúng bao gồm các lớp và phơng thức để làm mọi chuyện từ việc sinh số ngẫu nhiên tới việc tải các file âm thanh và truy cập các site trên Internet Tuy nhiên, chúng ta chỉ sử dụng một số nhỏ các gói này (Mà trên thực tế chỉ là bốn gói java. applet, java. awt, java. awt.event và java. lang.) Ba trong bốn gói này đã xuất hiện trong điều lệnh import trong chơng trình. .. khách hàng thăm home page Việc sử dụng trình appletviewer để chạy các Applet của bạn có u điểm là bạn có thể tái tải (reload) các Applet Nếu Applet bị hỏng, bạn có thể thay đổi nó và biên dịch lại, sau đó chọn Reload trên menu Applet trong cửa sổ appletviewer Temperature Applet Chơng trình nguồn TempApplet .java import java. applet.Applet; import java. awt.*; import java. awt.event.*; public class TempApplet...Biến và các điều lệnh gán Chúng ta tiếp tục với chơng trình nhiệt độ ở trên Dòng mã: int temperature; sẽ mô tả rằng temperature là một biến (variable) Các biến có tầm quan trọng mang tính quyết định trong lập trình máy tính, vì thế chúng tôi sẽ dành chút thời gian để giải thích về bản chất của chúng và cách mà chúng đợc sử dụng Abstract boolean break byte case cast... gói này là sẵn có cho chơng trình của chúng ta Ba gói này chứa mọi thứ cần thiết cho tất cả các Applet trong cuốn sách này, vì thế chỉ cần ba điều lệnh import nh trên là đủ cho mọi Applet Có một nguyên nhân giải thích tại sao chúng ta không cần sử dụng điều lệnh cho gói java. lang Đây là gói duy nhất đợc nhập tự động vào tất cả các chơng trình Java; việc viết điều lệnh import java. lang.* là không cần thiết... push me Tạo một nhãn intro Bảng 3.1: Một số lớp trong gói java. awt Trình appletviewer Trớc khi bắt đầu với Applet tiếp theo, chúng tôi cần ghi chú một chút về cách mà chúng ta sẽ dùng để thực thi các Applet Kể từ bây giờ trở đi, chúng ta sẽ không chạy các Applet trong những trang Web mà sử dụng một chơng trình gọi là appletviewer Đó là một trình duyệt chuyên dụng chỉ hiểu một số nhỏ các tài liệu HTML . dể chơng trình của mình trong một file có tên là whatever .java (whatever có thể là bất kỳ, nhng java phải là java) . Gõ dòng lệnh: java whatever .java để biên dịch chơng trình. Sau đó gõ: javac whatever để. dụng một trình soạn thảo sẽ giúp bạn tiến hành viết và gỡ rối chơng trình đợc dễ dàng hơn. Nhớ rằng chơng trình mà bạn viết và gõ vào máy tính là chơng trình Java, một ngôn ngữ lập trình mức. nó, là các ngôn ngữ lập trình đều không mềm dẻo; và giao tiếp với máy tính là công việc vất vả nhất cho những lập trình viên mới vào nghề. Java đợc thiết kế đặc biệt để lập trình an toàn trên

Ngày đăng: 03/08/2014, 00:11

Từ khóa liên quan

Mục lục

  • Chương I lập trình là gì ?

    • Con chuột máy trong mê cung

    • Máy tính và ngôn ngữ lập trình

    • Chương trình và thuật toán

    • ứng dụng và Applet

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

    • Lập trình hướng đối tượng: thăm lại chú chuột trong mê cung

      • Sự phá phách của lũ chuột Tính trừu tượng

      • Tại sao phải lập trình hướng đối tượng ?

      • Chương II những thành phần cơ bản của Java

        • Hai chương trình đơn giản

        • Vào ra đơn giản

        • Biến và các điều lệnh gán

        • Kiểu dữ liệu và biểu thức dữ liệu

        • Lớp, phương thức, đối tượng

          • Lớp String

          • Phương thức lớp và biến lớp

          • Về ký hiệu .

          • Các kiểu mẫu (prototypes)

          • Các điều lệnh (Statements)

          • Tổ chức chương trình

          • Gỡ rối

          • Chương III Applet

            • HTML

            • Applet và thẻ APPLET

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

Tài liệu liên quan