Java Technology: Programming Language
● As a programming language, Java can create all kinds of applications that you could create using any conventional programming language.
Java Technology:A Development Environment
● As a development environment, Java technology provides
you with a large suite of tools:
– A compiler (javac)
– An interpreter (java)
– A documentation generator (javadoc)
– A class file packaging tool and so on...
Java được xây dựng chủ yếu trong bộ công cụ phát triển java JDK (Java Development Kit), bao gồm các thư viện chuẩn, các trình biên dịch (Compiler) (javac), thông dịch (interpreter)(java), bộ soạn tài liệu (javadoc); JVM (java vỉtual machine) ... đây chính là platform để phát triển các ứng dụng Java.
JDK 1.0 khởi đầu vào năm 1995. JDK 1.1 ra đời 1 năm sau đó (1996) với nhiều cải tiến như:
- Tăng thêm thư viện giao diện AWT (Abstract Windows ToolKit)
- Xây dựng hệ thống thư viện JavaBeans.
- Xây dựng thư viện lập trình giao diện JFC (Java Foundation Class)
- Thêm các lớp mới: java.math, java.net...
Từ đó, java được cải tiến liên tục qua các phiên bản: 1.12,1.13...1.16- JDK 1.16 là lõi viết lên các IDE nổi tiếng như JBuilder 2.0 của Borland, Visual Age của IBM, Visual J++ 6.0 của MS.
Năm 1998, JDK 1.2 ra đời với nhiều thay đổi, bảo mật hơn, chạy nhanh hơn và linh động hơn 1.1
--JDK 1.2 tích hợp JavaBeans và JFC vào Core Java API
--Phát triển thêm đồ họa 2D, 3D
--EJB (Enterprise Java Beans) và JSP(Java Server Page).
Tháng 7/2002, JDK 1.4 ra đời, hỗ trợ 3 môi trường:
--Java Standard Edition: Java chuẩn dành cho hầu hết môi trường phát triển ứng dụng Java.
--Java Enterprise Edition: Java dành cho Enterprise. Hỗ trợ Web, EJB, JSP, servlet...
--Java Mobile: môi trường phát triển các ứng dụng cho các thiết bị di động.
30/9/2004, J2SE 5.0 ra đời với hơn 100 feature mới. Code name Tiger.
11/12/2006, J2SE 6.0 ra đời dưới sự phát triển của JSR 270. Code name Mustang.
Hãy nhớ lại mục đích của Java là gì? Chạy trên nhiều nền hệ điều hành, nhiều nền phần cứng, trên nhiều thiết bị khác nhau... JVM chính là chìa khóa giúp java đạt được mục đích trên.
Mã nguồn Java sẽ được bộ biên dịch javac biên dịch thành mã Bytecode, chạy trên các máy ảo Java (JVM). Mỗi hệ điều hành, mỗi phần cứng sẽ có bộ máy ảo riêng cho nó. Do vậy, các ứng dụng của Java có thể chạy trên nhiều nền chừng nào máy đó còn đi kèm bộ thông dịch, bộ gỡ rối, và bộ thư viện kiểm soát mã thực thi của Java.
Kiến trúc này là kiến trúc trung tính (Neutral Architecture).
Mô hình biên dịch và thực thi các ứng dụng Java:
-Sử dụng Text Editor viết các mã nguồn của Java: Ví dụ Hello.java
-Biên dịch Hello.java thành mã Byte code Hello.class bằng trình biên dịch javac. Việc này chỉ làm 1 lần.
-Thông dịch các mã bytecode bằng trình thông dịch java. Lặp lại nhiều lần. Mỗi lần chạy các ứng dụng java đều phải thông dịch từ trình thông dịch này.
Các đặc điểm của Java:
-Đơn giản (Simple)
-Hướng đối tượng (Object Oriented)
-Phân tán (Distributed)
-Đa tuyến (Multithreaded)
-Mạnh mẽ (Robust)
-Trung tính (Architecture neutral)
-Khả chuyển (Portable)
-Linh động (Flexible)
-Bảo mật (Security)
-Hiệu quả cao (High Performance)
Các đặc tính này sẽ được làm rõ hơn khi làm việc với Java
Trước khi bắt đầu viết chương trình đầu tiên. Chúng ta nhắc lại một chút về kiến trúc của Java.
- Mã nguồn Java được viết dưới dạng plain text, với đuôi mở rộng là .java . Source file được biên dịch bằng javac compiler thành .class file. File .class này là mã bytecode, không chạy ngay bởi vi xử lý được mà phải chạy qua Java Virtual Machine (JVM).
-JVM có thể được cài đặt trên rất nhiều nền, cho nên cùng 1 file .class có thể chạy trên được Microsoft Windows, Solaris TM Operating System (Solaris OS), Linux, hay Mac OS
Một vài định nghĩa:
-Console: Cổng giao diện dòng lệnh.
VD: cmd của windows, terminal của Linux...
-Text Editor
VD: Notepad, Wordpad, vi, emacs ...
-Intergrated Development Environment hay IDE:
Môi trường phát triển ứng dụng, tích hợp tất cả các thứ như Text Editor, Compiler, Interpreter, Debugger vào 1 gói Software dùng để phát triển phần mềm cho thuận tiện.
VD: Eclipse, Netbeans, ..............
Sơ lược về lịch sử lập trình:
Step-by-step programming: Trong những ngày đầu của ngành IT, lập trình là một công việc khó khăn. Mỗi bước làm việc của máy đều phải theo dõi tỉ mỷ, cẩn thận. Ngôn ngữ lập trình thời đó là ngôn ngữ máy (Machine Language), sau đó cao hơn 1 chút là hợp ngữ (Asembly Language). Mỗi mã lệnh của ngôn ngữ tương ứng với một chỉ thị của CPU. Hiện nay, Asembly chủ yếu dùng để lập trình nhúng cho các con Chip. Các bạn khoa điện tử chắc sẽ rất rõ về ngôn ngữ này.
Procedure language: Ngôn ngữ thủ tục.
Đó là Pascal và C, ngôn ngữ thủ tục giúp các lập trình viên dễ dàng trong công việc so với giai đoạn trước. Các chuỗi hành động sẽ được tập hợp lại thành một khối gọi là hàm (function) hay thủ tục (procedure). Các khối này là các black box, người sử dụng không cần biết trong khối đó cụ thể làm những bước nào, chỉ cần biết tham số đầu vào và kết quả đầu ra như thế nào. Như hàm writeln trong Pascal hay println trong C.
Vấn đề đặt ra: trong ngôn ngữ thủ tục, các hộp đen được kết nối với nhau để tạo ra một hệ thống phù hợp với yêu cầu mới. Điều này sản sinh ra một kiến trúc hộp đen cha bao gồm rất nhiều hộp đen con được kết nối với nhau (trong C có khái niệm con trỏ hàm - function pointer thực hiện công việc này). Khi muốn thay đổi dữ liệu trong một hộp đen con (không phải dữ liệu trả về), các hộp đen con khác và hộp đên cha cần phải được kiểm tra lại và biên dịch lại, nếu không dễ gây ra lỗi.
Với ứng dụng lớn, đây là một việc phức tạp.
Structured Development (Phát triển cấu trúc): Sự phát triển cấu trúc không thay đổi các ngôn ngữ đã dùng. Mà là một phương pháp phát triển phần mềm mới. Trong phương pháp này, lập trình viên phải lên được 100% kế hoạch của chương trình trước khi viết bất kỳ dòng code nào. Cần soạn một lượng biểu đồ lớn để xác lập tương quan giữa các hàm với nhau, với các dữ liệu.
Vấn đề là: Khó có thể đưa vào thiết kế tất cả những gì xảy ra với chương trình. Một chương trình tốt phải được phát triển trên điều kiện thực tế: lập trình, thử, cáp dụng, cải tiến .... Lập trình cấu trúc đòi hỏi một thiết kế hoàn chỉnh trước khi mọi thứ được cài đặt. Do đó sẽ không có "Ôi mẹ ơi, tôi quên mất feature này rồi! "
Lập trình hướng đối tượng OOP:
-Đối tượng là khái niệm cơ sở trong OOP. Nó không phải là con số, không phải là cấu trúc thông thường. Theo ý kiến của mình nó áp dụng thói quen của con người vào công việc lập trình.
Các sự vật trên thế giới đều có những đặc tính riêng, tiêu biểu cho sự vật đó. Các đặc tính này thông qua các giác quan sẽ lưu giữ lại "hình ảnh" của sự vật trong nhận thức của chúng ta. Các sự vật này, có tên gọi khác là các đối tượng. Việc biểu diễn lại các đặc tính, khả năng, hành động của đối tượng đó chính là OOP.
Các bạn nhớ lại các bài văn miêu tả con mèo của mình hồi học cấp 1. Chúng ta nhận biết sự hiện diện của con mèo như thế nào? Đó là thông qua các đặc tính cả nó: tên nó là Mun, lông màu đen, mắt màu xanh, có bốn chân, là động vật có vú... và các hành động ngủ, bắt chuột, nhảy, vẫy đuôi... một nhóm đối tượng có tập hợp các đặc tính riêng nào đó đại diện cho nhóm đó. Ví dụ, nhóm con mèo sẽ khác với nhóm con gà. Vậy những đặc điểm nào làm nên sự khác nhau đó???
Những đặc điểm này được gọi là lớp (Class). Mỗi đối tượng là một thực thể của lớp nào đó.
OOP chính là áp dụng các qui tắc của các bài văn miêu tả vào ngôn ngữ lập trình. Chúng ta xây dựng lớp Con mèo.
Lớp Con mèo:
các thuộc tính:
+Tên
+Là động vật có vú không?
+màu lông
+màu mắt
+Số lượng chân
các phương thức:
+ngủ
+bắt chuột
+nhảy
+vẫy đuôi
Và con mèo Mun của IPv6 chính là một đại diện (instance) của lớp con mèo. Hay gọi là đối tượng con mèo Mun.
Các phương thức trong đối tượng khi được triệu gọi sẽ làm thay đổi thuộc tính của chính nó và thay đổi thuộc tính của các đối tượng khác như thế nào?
Ví dụ: như mèo Mun vồ con chuột==> con chuột chết. Ngoài ra, răng con Mun sẽ có thay đổi gì? --> dính máu.
OOP chính là sự biểu diễn lại các vấn đề này.
Các điểm mạnh của OOP
Chương trình Java đầu tiên: Hello World
.
Chạy Hello World trên Console:
Mã nguồn viết bằng Notepad: HelloWorld.java
Lưu trong thư mục: C:\Java\javafiles
Code:
public class HelloWorld{ public static void main(String args[]){ System.out.println("Hello World!"); } }
Cấu trúc chương trình Java.
Java là ngôn ngữ hướng đối tượng nên tất cả các hàm phương thức đều phải nằm trong khai báo lớp đối tượng. Kể cả chương trình chính.
Code:
public class HelloWorld{ ........ }
Code:
public static void main(String args[]){ System.out.println("Hello World!"); }
Chương 4: Progamming Fundamentals
(những quy tắc lập trình cơ bản)
Objectives
At the end of the lesson, the student should be able to:
● Identify the basic parts of a Java program
● Differentiate among Java literals, primitive data types, variable types ,identifiers and operators
● Develop a simple valid Java program using the concepts learned in this chapter
Mục tiêu:
Sau bài học, bạn có thể:
- Nhận biết được những phần cơ bản của 1 chương trình Java.
- Phân biệt sự khau giữa các literals ?? Java, các kiểu dữ liệu cơ bản (nguyên thuỷ), các kiểu biến, các định danh và các toán tử.
- Trình bày một chương trình Java đơn giản, hợp lệ sử dụng các khái niệm đã học trong chương này.
Dissecting my First Java Program
Code:
1 public class Hello 2 { 3 /** 4 * My first Java program 5 */ 6 public static void main( String[] args ){ 7 8 //prints the string Hello world on screen 9 System.out.println(“Hello world”); 10 11 } 12 }
Trích:
Mới học QT4, có 1 đoạn code sau, chưa rõ vấn đề lắm, post lên cho anh Freshboy, anh Tuantrangdream và anh em cùng giải đáp. class Tinhtong { int a = 10; int b = 20; public static void main(String args[]) { int c; c = a+b; System.out.println("Ket qua" + c); } } Hai cái dòng màu đỏ phải có chữ static thì mới thực thi được, còn ko có nó sẽ báo lỗi, vì sao vậy? . Xin giải thích kỹ chổ này giúp, cám ơn. |
Trích:
class Tinhhieu { int a = 10; int b = 20; void hienthi() { int c; c = b-a; System.out.println("ket qua: " + c); } public static void main(String args[]) { Tinhhieu t = new Tinhhieu(); t.hienthi(); } } vì sao đoạn code ở trên ko sử dụng static ngay lúc khai báo biến a và b mà nó chạy được. Em cám ơn |
Trích:
để có thể truy xuất trực tếp không thông qua object bạn chỉ việc khai báo biến a,b là public static, sau đó để có thể có thể lấy giá trị thì gọi trực tiếp thông qua class bằng cách gọi ClassName.property hoặc ClassName.method() , trong trường hợp này là Tinhtong.a hoặc Tinhtong.b Một thực thể (method hoặc biến) khi được chỉ định là static sẽ được khởi tạo một lần duy nhất khi class chứa thực thể đó được load vào JVM, khi một thực thể là static có nghĩa nó là thành phần "tĩnh" của class, nó là thuộc tính hoặc hành vi ở mức class (ko phải ở mức object), nó được khởi tạo một lần duy nhất và tồn tại ngay cả khi chưa hề có object nào được new trên class đó. Lý do hàm main phải là static vì JVM cần phải có được một gì đó bắt đầu khi application chạy trước cả khi object đầu tiên được khởi tạo, để có thể bắt đầu một chương trình trước cả khi object đầu tiên được khởi tạo JVM cần nắm được thứ gì đó đã tồn tại, đã được khởi tạo, đã được cấp phát vùng nhớ, và đã có thể chạy được, ... đó là hàm main. Vì thế hàm main phải là static. Việc ứng dụng static thì rất nhiều, bạn có thể sử dụng từ khóa static khi muốn có một thứ gì đó tồn tại duy nhất ở mức class, ko phụ thuộc vào object. Cụ thể một ví dụ là sử dụng static là Singleton pattern. Giả sử đến một lúc nào đó, bạn muốn có một object mà sẽ khởi tạo 1 lần duy nhất, tồn tại duy nhất tại bất kì đâu trong ứng dụng của bạn, khi bạn cần dùng tới nó bạn chỉ việc lấy nó ra (không muốn dùng đến từ khóa new, vì việc dùng từ khóa new để khởi tạo một 1 object mới cho cùng một chức năng là dư thừa và phí phạm tài nguyên). Bạn có thể làm như sau: Code: public class Test { private static Test objInstance = null; protected Test () { } public static synchronized Test Singleton() { if (Test .objInstance == null) { Test .objInstance = new Test (); } return Test .objInstance; } public void print () { System.out.println ("Đây là hàm dùng chung"); } } ví dụ đoạn code trên bạn có class Test có một hàm đơn giản là print(), bạn muốn sử dụng method print(), tại nhiều nơi trong ứng dụng của bạn nhưng lại không muốn mỗi lần như vây phải new một object mới (lãng phí tài nguyên). Bạn để ý thấy class Test chứa 1 property là private static với type là chính nó. Hàm contructor của class Test được overwrite thành protected. Do đó bạn sẽ không thể tạo ra đối tượng kiểu Test bằng cách viết new Test(). Hàm Singleton() là một hàm static, làm một việc duy nhất là kiểm tra objInstance có null hay không, nếu có thì tạo mới và return nó về. Khi sử dụng class Test bạn chỉ cần viết như thế này: Code: Test obj = Test.Singleton(); obj.print(); và bạn có thể yên tâm là đối tượng được trả về qua hàm Singleton() là duy nhất. ps: theo mình thì cái mà bạn còn chưa thông là cái từ khóa static, sử dụng nó thế nào, nó dùng vào việc gì, và tại sao phải tồn tại nó ? |
Không có nhận xét nào:
Đăng nhận xét