[Bài viết] Gợi ý cách viết một bài báo khoa học

Gợi ý cách viết một bài báo khoa học

Nghiên cứu khoa học là một hoạt động có tổ chức và logic, do vậy viết báo cáo cũng phải có tổ chức và logic.

Bài viết nầy cung cấp các tiến trình và kỹ thuật cơ bản để thực hiện một bài báo về kết quả nghiên cứu. Hy vọng rằng các nội dung được giải thích trong bài viết có thể giúp bạn cải thiện kỹ năng trong việc viết một bài báo khoa học.


Gợi ý cách viết một bài báo khoa học


Gợi ý cách viết một bài báo khoa học


Blockchain Công Nghệ Của Tương Lai

Đại Số Gia Tử Và Ứng Dụng



1. Viết bài báo khoa học

Một câu hỏi thông thường là tại sao các nhà khoa học phải viết bài báo khoa học? Có nhiều lý do, có thể là để đóng góp kiến thức trong một lĩnh vực chuyên môn, hỗ trợ phát triển nghề nghiệp, báo cáo cho nhà tài trợ đã cung cấp tiền nghiên cứu, hoặc để trở nên nổi tiếng,... Trong nhiều lý do, lý do quan trọng nhất để viết bài báo khoa học là thông tin vì thông tin hiệu quả là sức sống cho khoa học phát triển.

2. Các câu hỏi đầu tiên

Trước khi viết bài báo khoa học bạn cần tự hỏi mình các câu hỏi sau:
- Nghiên cứu của bạn đã đủ sâu chưa để viết bài báo?
- Đây là bài báo để trình cho nhà tài trợ hay một tổ chức giảng dạy để nhận bằng cấp hoặc đây là một bài báo để báo cáo định kỳ cho một tổ chức?
- Đây là bài báo cần xuất bản để thông tin kết quả nghiên cứu cho mọi người?

3. Các đặc điểm của một bài báo khoa học tốt

- Trình bày chính xác về kết quả nghiên cứu.
- Viết rõ ràng và dễ hiểu.
- Tuân theo kiểu trình bày chuyên biệt về kiến thức khoa học.
- Không sử dụng từ ngữ khó hiểu hay thông tục.
- Tài liệu chứng minh đầy đủ và thích hợp, có liên hệ với chủ đề của bài báo.
- Không sử dụng kết quả nghiên cứu (chưa xuất bản) của người khác khi chưa được sự đồng ý (đây là một lỗi lầm rất nghiêm trọng).

4. Các phần của một bài báo

Một bài báo khoa học mẫu bao gồm các thành phần sau đây, được liệt kê theo thứ tự xuất hiện trong bài viết:
- Tựa đề (Title): Đây là tên của bài báo, cần ngắn gọn và phù hợp để chú dẫn (indexing).
- Tác giả (Authors): Liệt kê tên người thực hiện nghiên cứu và viết bài báo.
- Địa chỉ thư tín (Postal address): Địa chỉ đầy đủ của tác giả để người đọc có thể liên hệ được.
- Tóm lược (Abstract): Mô tả vắn tắt vấn đề và kết quả.
- Giới thiệu (Introduction): Cho biết vấn đề nghiên cứu là vấn đề gì và giới thiệu các thông số nghiên cứu.
- Vật liệu và phương pháp (Materials and methods): Bạn đã nghiên cứu vấn đề như thế nào, phải trình bày như thế nào để người khác có khả năng lập lại nghiên cứu của bạn.
- Kết quả (Results): Bạn đã tìm được kết quả gì, trình bày số liệu.
- Thảo luận (Discussion): Các kết quả tìm được có ý nghĩa gì? thảo luận và giải thích kết quả.
- Cảm tạ (Ackowledgements): Cảm tạ người tài trợ kinh phí nghiên cứu, những người quan trọng đã giúp bạn nghiên cứu (không phải các tác giả viết chung bài báo).
- Tài liệu tham khảo (References): Liệt kê các tác giả, năm xuất bản và tên tài liệu,… mà bạn đã tham khảo để phát biểu trong bài báo.

5. Các hướng dẫn cho các phần của một bài báo

5.1. Tên đề tài (Title)

Tên đề tài là phần được đọc nhiều nhất vì các lý do: các nhà nghiên cứu khác đọc nó khi lướt qua nội dung của một tạp chí và thông qua việc tìm kiếm tài liệu từ các nguồn thông tin thứ cấp thường ghi tên đề tài và tên tác giả. Tên đề tài có thể được lưu trữ trong thư mục về cơ sở dữ liệu, chú dẫn và được trích dẫn trong các bài báo khác. Tên đề tài có thể giúp các nhà nghiên cứu tìm kiếm các thông tin quan trọng. Một tên đề tài tốt cần:
- Chứa ít từ ngữ nếu có thể được. Bỏ các từ không cần thiết, thí dụ: Một số chú ý trên…., Các quan sát trên…. để làm tên đề tài được cô đọng. Nhiều tạp chí yêu cầu tối đa 25 từ.
- Mô tả chủ đề một cách chuyên biệt trong một không gian giới hạn. Không được hứa hẹn nhiều hơn nội dung của bài viết. Thông thường tên đề tài nêu rõ chủ đề nghiên cứu hơn là kết quả nghiên cứu.
- Tên đề tài phản ánh chính xác về nội dung bài viết và dễ hiểu, tránh dùng chữ viết tắt, công thức và từ ngữ khó hiểu. Sử dụng những từ ngữ quan trọng nhất, đặt chúng trước tiên trong tên đề tài.
- Hạn chế sử dụng động từ (verb).
- Bao gồm các từ khóa (keywords) quan trọng nếu có thể được vì chúng sẽ được sử dụng cho chú dẫn và tìm kiếm qua mạng.
- Tuân theo kiểu định dạng bài báo của nơi bạn định xuất bản.

5.2. Tác giả (Authors)

- Tên tác giả cần ghi đầy đủ, không sử dụng tên viết tắt.
- Chỉ ghi tên người thật sự là tác giả có tham gia viết bài.
- Ghi theo thứ tự tên tác giả đóng góp quan trọng trong bài báo.
- Ghi chú địa chỉ của tác giả theo định dạng của nhà xuất bản.
- Tên tác giả ghi đầu tiên là tác giả chính (senior author), thứ tự các tên tác giả tiếp theo được ghi tùy theo mức độ đóng góp quan trọng cho nghiên cứu. Người hướng dẫn, cố vấn cho nghiên cứu, và đôi khi một trưởng phòng thí nghiệm hay trưởng cơ quan nghiên cứu muốn được ghi vào nhóm tên tác giả thì vị trí thích hợp nhất là tên tác giả cuối cùng.
- Những người chỉ tiếp thu thập số liệu hoặc giúp đỡ thực hiện thí nghiệm thì ghi trong phần cảm tạ.

5.3. Tóm tắt (Abstract)

Tóm tắt cần được viết theo kiểu khẳng định hơn là kiểu mô tả, do vậy nó trình bày sự thật hơn là viết chung chung. Một tóm lược tốt cần phải:
- Ngắn gọn, khoảng 200-250 từ (tiếng Anh), khoảng 350-400 từ (tiếng Việt, khoảng 1/2 trang A4), thông thường là một đoạn văn (paragraph).
- Tóm tắt mục đích nghiên cứu, phạm vi nghiên cứu, phương pháp sử dụng, các kết quả chính bao gồm bất kỳ phát hiện mới nào, các kết luận chủ yếu và ý nghĩa của chúng.
- Không ghi lược khảo theo tên bảng, hình vì bảng và hình chỉ xuất hiện trong nội dung bài viết mà thôi.
- Không sử dụng các chữ viết tắt ngoại trừ chúng là những thuật ngữ tiêu chuẩn hoặc đã được giải thích.
- Không ghi tên tác giả và tài liệu tham khảo.
- Không ghi bất kỳ thông tin hoặc kết luận nào nằm ngoài nội dung bài viết.
- Không ghi các phát biểu tổng quát hoặc tóm tắt, phải ghi các kết quả tìm được một cách rõ ràng.
- Từ khóa (keywords): Các từ khóa được liệt kê độc lập bên dưới tóm tắt, khoảng 3-5 từ. Tất cả các từ khóa phải hiện diện trong phần tóm tắt.

5.4. Giới thiệu (Introduction)

Một giới thiệu tốt cần tương đối ngắn gọn, để nói tại sao người đọc cần chú ý đến bài báo, tại sao tác giả thực hiện nghiên cứu và cung cấp kiến thức cần thiết cho người đọc để hiểu và nhận xét bài báo.
- Trình bày các tính chất và phạm vi của các vấn đề đã được nghiên cứu.
- Liên hệ đến các nghiên cứu trước đây, có thể sơ lược ngắn gọn tài liệu tham khảo nhưng phải có liên quan rõ ràng đến vấn đã nghiên cứu.
- Giải thích các mục tiêu và các phương pháp nghiên cứu, khảo sát được bao gồm.
- Định nghĩa bất kỳ các thuật ngữ chuyên biệt hoặc chữ viết tắt sẽ được sử dụng sau đó trong bài viết.
- Cần phát biểu một cách logic và rõ ràng về giả thiết hoặc nguyên lý nghiên cứu.
- Phần giới thiệu không nên viết quá hai trang đánh máy.

5.5. Vật liệu và phương pháp (Materials and Methods)

Cách đơn giản nhất để viết phần nầy là trình bày theo trình tự. Bạn cần cung cấp tất cả thông tin cần thiết để những người nghiên cứu khác nhận xét được nghiên cứu của bạn hoặc có thể lập lại thí nghiệm của bạn. Các nội dung gồm có:
- Thời gian và địa điểm thực hiện nghiên cứu.
- Mô tả đầy đủ chi tiết bố trí thí nghiệm (kiểu bố trí, nghiệm thức, lập lại,...).
- Mô tả chính xác các đối tượng đã được sử dụng trong nghiên cứu (thí dụ: giống, dòng, tuổi cây,...).
- Nêu chi tiết kỹ thuật, khối lượng, nguồn gốc và phương pháp chuẩn bị các vật liệu đã được sử dụng. Nên sử dụng tên Latin, tên hóa học, khô;.

Chú ý:
- Không được mơ hồ về tên, chữ viết tắt.
- Tất cả khối lượng sử dụng phải ghi theo đơn vị tiêu chuẩn.
- Tất cả hóa chất phải được nhận biết rõ ràng để những người nghiên cứu khác có thể sử dụng lập lại thí nghiệm của bạn.
- Mỗi bước thí nghiệm phải được nêu rõ, cho biết số lần lập lại.
- Không được đưa vào bất kỳ điều gì không liên hệ đến kết quả nghiên cứu.
- Không trình bày các chi tiết không cần thiết vì có thể làm người đọc nhầm lẫn.

5.6. Kết quả (Results)

Đây là phần cốt lỏi của bài báo. Cách dễ nhất là trình bày các kết quả tương ứng theo trình tự của các mục tiêu đã được nêu trong phần giới thiệu (Introduction).
- Phát biểu đơn giản và rõ ràng.
- Báo cáo số liệu trung bình cùng với sai số chuẩn (standard error) hoặc độ lệch chuẩn (standard deviation) hay kết quả từ phân tích thống kê.
- Trình bày số liệu trong bảng hoặc hình, không trình bày lập lại số liệu trong phần viết. Chỉ nhắc lại số liệu đã được trình bày trong bảng hoặc hình đối với các số liệu quan trọng nhất. Cùng một nội dung số liệu thì chọn trình bày bằng hình hoặc bảng, không trình bày cả hai.
- Có thể trình bày số liệu không có ý nghĩa thống kê nếu như chúng có ảnh hưởng đến việc giải thích kết quả.
- Chỉ trình bày số liệu có liên quan đến chủ đề bài báo như đã định nghĩa trong phần giới thiệu.
- Đánh số tất cả bảng và hình theo thứ tự.
- Chỉ nên trình bày những bảng và hình cần thiết, rõ ràng và có giá trị.
- Cần tránh: Số liệu lập đi lập lại; số liệu không có ý nghĩa thống kê không cần thiết; các bảng và hình không cần thiết; các từ ngữ không cần thiết.
- Phần kết quả cũng có thể viết chung với thảo luận nhưng phải phân biệt rõ nội dung nào là kết quả, nội dung nào là thảo luận.

5.7. Thảo luận (Discussion)

Đây là phần khó nhất của bài báo. Trong phần nầy bạn giải thích ý nghĩa của kết quả và gợi ý cho nghiên cứu trong tương lai. Một thảo luận tốt bao gồm:
- Không lập lại những gì đã đề cập trong phần lược khảo tài liệu.
- Liên hệ các kết quả với các câu hỏi được đặt ra trong phần giới thiệu.
- Cho thấy kết quả và giải thích phù hợp với nhau như thế nào hoặc không đồng ý như thế nào với kết quả trong các tài liệu đã công bố trước đó.
- Thảo luận các hàm ý lý thuyết của công việc nghiên cứu.
- Chỉ ra ý nghĩa của kết quả nghiên cứu.

Chú ý:
- Bám sát các mục tiêu nghiên cứu.
- Tuân theo trình tự của các mục tiêu nghiên cứu.
- Tránh các chi tiết không cần thiết hoặc lập lại thông tin từ những phần trước đó.
- Không đưa vào thảo luận các phương pháp, quan sát hay kết quả khác với phần đã trình bày.
- Giải thích kết quả và đề nghị hàm ý hoặc ý nghĩa của chúng.

5.8. Kết luận và đề nghị (Conclusions and recommendation)

- Chọn phát biểu các kết luận quan trọng nhất với các luận cứ rõ ràng cho từng kết luận.
- Không trình bày lập lại các số liệu của kết quả.
- Phải bám sát các chủ đề đã trình bày trong phần giới thiệu, không đưa vào các kết luận gây ngạc nhiên, khác với chủ đề.
- Đề xuất nghiên cứu trong tương lai tiếp theo kết quả đã đạt được hoặc đề nghị áp dụng kết quả nếu nghiên cứu có kết quả thật thuyết phục.

5.9. Cảm tạ (Acknowledgements)

Trong bài báo có thể có hay không có phần cảm tạ. Nếu có, trong phần nầy bạn có thể ghi lời cám ơn cơ quan hoặc cá nhân đã giúp bạn một cách có ý nghĩa trong việc thực hiện thí nghiệm. Đó có thể là nơi cung cấp kinh phí, phòng thí nghiệm cung cấp vật liệu, phương tiện nghiên cứu; có thể là người cho các lời khuyên khi thực hiện thí nghiệm, người giúp đọc và góp ý cho bài báo.

5.10. Tài liệu tham khảo (References)

Liệt kê đầy đủ các tài liệu tham khảo mà các nội dung của chúng đã được trích dẫn trong bài viết. Không ghi dư các tài liệu không được trích dẫn.

Nguồn Internet

#


Tailieucntt.org đồng hành cùng bạn

[Tự học lập trình Java] Bài 1: Chương trình JAVA đầu tiên

Chương trình sau đây cho phép hiển thị một thông điệp “My first program in Java”.

Để soạn thảo chương trình bạn có thể sử dụng 1 trong các công cụ lập trình phổ biến sau: Netbean, Eclipse, Jcreator. Đây là những công cụ hoàn toàn miễn phí.

Tiến hành soạn thảo (Ví dụ sau đây sử dụng công cụ Netbean7.4 để soạn thảo chương trình, các công cụ khác tiến hành tương tự)

Bước 1 - Tạo Project mới: File / New project

Bước 2 - Chọn: Java – Applications
Bước 3 - Đặt tên Project và class

Bước 4 - Soạn thảo chương trình dưới đây
// This is a simple program called “First.java”

package first;

public class First
{
public static void main(String args[])
 {
    System.out.println(“My first program in Java”);
 }
}

Lưu ý: Các bạn có thể xóa hết nội dung trong của sổ đi và gõ lại.

Bước 5 - Chạy chương trình: click RUN
Lưu ý:
Tên file đóng vai trò rất quan trọng trong Java. Chương trình biên dịch Java chấp nhận phần mở rộng .java. Trong Java, mã lệnh phải nằm trong các lớp. Bởi vậy tên lớp và tên file phải trùng nhau. Java phân biệt chữ hoa và chữ thường (case-sensitive).

Phân tích chương trình đầu tiên

// This is a simple program called “First.java”

Ký hiệu “// ” dùng để thuyết minh dòng lệnh. Trình biên dịch sẽ bỏ qua dòng thuyết minh này. Java còn hỗ trợ thuyết minh nhiều dòng. Loại thuyết minh này có thể bắt đầu với /* và kết thúc với */

/*This is a comment that

extends to two lines*/
/ *This is
a multi line

comment */

Dòng kế tiếp khai báo lớp có tên ‘First’. Để tạo một lớp thêm ta bắt đầu với từ khoá ‘class’, kế đến là tên lớp (và cũng chính là tên file).

class First: Tên lớp nói chung nên bắt đầu bằng chữ in hoa. Từ khoá ‘class’ khai báo định nghĩa lớp. ‘First’ là tên của lớp. Một định nghĩa lớp nằm trọn vẹn nằm giữa hai ngoặc móc mở ({) và đóng (}). Các ngoặc này đánh dấu bắt đầu và kết thúc một khối lệnh.

public static void main(String args[ ]): Đây là phương thức chính, từ đây chương trình bắt đầu việc thực thi của mình. Tất cả các ứng dụng java đều sử dụng một phương thức “main” này. Chúng ta sẽ tìm hiểu từng từ trong lệnh này.

Từ khoá ‘public’ là một chỉ định truy xuất. Nó cho biết thành viên của lớp có thể được truy xuất từ bất cứ đâu trong chương trình. Trong trường hợp này, phương thức “main” được khai báo ‘public’, bởi vậy JVM có thể truy xuất phương thức này.

Từ khoá ‘static’ cho phép main được gọi tới mà không cần tạo ra một thể hiện (instance) của lớp. Nhưng trong trường hợp này, bản copy của phương thức main được phép tồn tại trên bộ nhớ, thậm chí không có một thể hiện của lớp đó được tạo ra. Điều này rất quan trọng vì JVM trước tiên gọi phương thức main để thực thi chương trình. Vì lý do này phương thức main cần phải là tĩnh (static). Nó không phụ thuộc vào các thể hiện của lớp được tạo ra.

Từ khoá ‘void’ thông báo cho máy tính biết rằng phương thức sẽ không trả lại bất cứ giá trị nào khi thực thi chương trình.

Phương thức ‘main()’ sẽ thực hiện một số tác vụ nào đó, nó là điểm mốc mà từ đó tất cả các ứng dụng Java được khởi động.

‘String args[]’ là tham số dùng trong phương thức ‘main’. Các biến số trong dấu ngoặc đơn nhận từng thông tin được chuyển vào ‘main’. Những biến này là các tham số của phương thức. Thậm chí ngay khi không có một thông tin nào được chuyển vào ‘main’, phương thức vẫn được thực hiện với các dữ liệu rỗng – không có gì trong dấu ngoặc đơn.

‘args[]’ là một mảng kiểu “String”. Các đối số (arguments) từ các dòng lệnh được lưu vào mảng. Mã nằm giữa dấu ngoặc móc ({ }) của ‘main’ được gọi là ‘method block’. Các lệnh được thực thi trong ‘main’ cần được viết trong khối này.

System.out.println(“My first program in Java”);

Dòng lệnh này hiển thị chuỗi “My first program in Java” trên màn hình. Phát biểu ‘println()’ tạo ra một cổng xuất (output). Phương thức này cho phép hiển thị chuỗi được truyền vào ra ‘System.out’. Ở đây ‘System’ là một lớp đã định trước, nó cho phép truy nhập vào hệ thống và ‘out’ là một chuỗi xuất được kết nối với dấu nhắc (console).

*Phụ lục* Nhập, xuất trong Java 
Có nhiều phương thức nhập, xuất khác nhau trong Java, trong phần này mình giới thiệu phương thức nhập, xuất đơn giản nhất để các bạn tiện làm bài tập. Còn các phương thức khác các bạn sẽ xem tìm hiểu kỹ hơn ở phần sau.

- Xuất - In kết quả ra màn hình sử dụng câu lệnh:
  System.out.print("Xâu, ký tự, biến, biểu thức mà bạn cần in ra"); // in xong không xuống dòng
hoặc
  System.out.println("Xâu, ký tự, biến, biểu thức mà bạn cần in ra"); // in xong xuống dòng

Ví dụ: In ra tổng hai số a, b cho trước
   int a=4,b=5;
   System.out.print(" Tong cua "+ a +" cong "+b+" bang "+ (a+b)); // Trong đó "+" là toán tử nối xâu.
   //Kết quả: Tong cua 4 cong 5 bang 9

 - Nhập - Nhập dữ liệu từ bàn phím sử dụng phương thức Scanner.
  + Để sử dụng phương thức Scanner cần khai báo thư viện:
    import java.util.Scanner; // sau khai bao backage
  + Trước khi nhập bạn cần khai báo đối tượng Scanner
    Ví dụ: Scanner inp = new Scanner(System.in); // inp là đối tượng Scanner
  + Nhập dữ liệu cho biến:
    Ví dụ: Nhập dữ liệu cho một số nguyên
               int a;
               Scanner inp =new Scanner(System.in);
               a= inp.nextInt(); // bạn muốn nhập kiểu dữ liệu nào bạn cần chọn next_Kiểu dữ liệu tương ứng.
 
Ví dụ: Viết chương trình nhập vào 2 số nguyên, tính tổng 2 số đó.

package tinhtong;
import java.util.Scanner;
public class TinhTong
{

   public static void main(String[] arg) {
   int a,b;

   // nhap a, b
   Scanner inp=new Scanner(System.in);
   System.out.print("\n a= ");  
   a=inp.nextInt();
   System.out.print("\n b= ");
   b=inp.nextInt();

   // tinh tong
   int tong=a+b;
   System.out.print("\n Tong = "+tong);  
  }
}

--------------------------------------------------- 
Tải ứng dụng Android tại đây:

Đọc thêm các bài khác:

Bài 1: Chương trình JAVA đầu tiên
Bài 2: Các kiểu dữ liệu và toán tử trong
Bài 3: Các cấu trúc điều khiển trong Java
Bài 4 : Mảng và chuỗi trong Java
Bài 5: Lớp (class) và đối tượng (object) trong Java
Bài 6:Thừa kế (Inheritance) và đa hình (Polymorphism)
Ví dụ lập trình giao diện đồ họa với Java (GUI)
Ví dụ lập trình kết nối dữ liệu với Java (JDBC)
Ví dụ về lập trình Android 

[Lập trình hướng đối tượng với Java] Ví dụ lớp trừu tượng (abstract class) [290916]

[Lập trình hướng đối tượng với Java] Ví dụ lớp trừu tượng (abstract class) [290916]
Xây dựng các class:
- Class NV (abstract)
 + Thuộc tính: Họ tên, địa chỉ, năm sinh, hệ số lương
 + Phương thức: Khởi tạo, nhập, tính lương (abstract), in thông tin
- Class LapTrinhVien kế thừa NV, bổ sung thêm
 + Thuộc tính: Số năm công tác
 + Phương thức: Tính lương
Trong đó: lương = hệ số lương * LCB + thưởng
(thưởng = 1,5 LCB nếu số năm công tác >10; ngược lại, thưởng = 1,0 LCB)
* Yêu cầu:
Nhập và in ra thông tin 01 nhân viên là lập trình viên
(họ tên, địa chỉ, năm sinh, lương)
------
Xây dựng Project như hình vẽ:


Code Java:

+ class NV

package vidu_loptruutuong_290916;
import java.util.Scanner;
public abstract class NV {
    // thuoc tinh
    final float LCB=1050000;
    String hoTen, diaChi;
    int namSinh;
    float heSoLuong;
 
    // Phuong thuc khoi tao
    public NV(String hoTen, String diaChi, int namSinh, float heSoLuong){
        this.hoTen=hoTen;
        this.diaChi=diaChi;
        this.namSinh=namSinh;
        this.heSoLuong=heSoLuong;
    }
 
    // Phuong thuc nhap thong tin
    public void NhapTT(){
        Scanner inp=new Scanner(System.in);
        System.out.println("\n * Nhap thong tin nhan vien: ");
        System.out.print("\n + Ho ten: ");
        hoTen=inp.nextLine();
        System.out.print("\n + Dia chi: ");
        diaChi=inp.nextLine();
        System.out.print("\n + Nam sinh: ");
        namSinh=inp.nextInt();
        System.out.print("\n + He so luong: ");
        heSoLuong=inp.nextFloat();
    }
 
    // Phuong thuc tinh luong (abstract)
    public abstract float TinhLuong();
 
    // In thong tin
    public void InTT(){
        System.out.print("\n * In thong tin nhan vien: ");
        System.out.print("\n + Ho ten: "+hoTen);
        System.out.print("\n + Dia chi: "+diaChi);
        System.out.print("\n + Nam sinh: "+namSinh);
        System.out.print("\n + He so luong: "+heSoLuong);
        System.out.print("\n + Luong thang: "+TinhLuong());
     
    }
}


+ class LapTrinhVien

package vidu_loptruutuong_290916;
import java.util.Scanner;
public class LapTrinhVien extends NV{
    // thuoc tinh
    int soNamCT;
 
    // phuong thuc khoi tao
    public LapTrinhVien(String hoTen, String diaChi, int namSinh, float heSoLuong,int soNamCT){
        super(hoTen, diaChi, namSinh, heSoLuong);
        this.soNamCT=soNamCT;
    }
 
    // phuong thuc nhap thong tin
    public void NhapTT(){
        super.NhapTT();
        Scanner inp=new Scanner(System.in);
        System.out.print("\n + So nam cont tac: ");
        soNamCT=inp.nextInt();
    }
 
    // phuong thuc tinh luong
    public float TinhLuong(){
        float thuong;
        if(soNamCT>10)
            thuong=(float)1.5*LCB;
        else thuong=LCB;
        return (heSoLuong*LCB+thuong);
    }
}


+ class ViDu_LopTruuTuong_290916

package vidu_loptruutuong_290916;

public class ViDu_LopTruuTuong_290916 {
    public static void main(String[] args) {
        // Khai bao doi tuong Lap trinh vien
        LapTrinhVien bill =new LapTrinhVien("","",1,1,1);
        bill.NhapTT();
        bill.InTT();
    }
 
}
----------
Tải ứng dụng Android tại đây:


Cùng bạn tự học CNTT - tailieucntt.org

[Tự học lập trình Java] Bài 6: Thừa kế (Inheritance) và đa hình (Polymorphism)

1. Thừa kế (inheritance) 

1.1. Lớp kế thừa
     Một lớp con (subclass) có thể kế thừa tất cả những vùng dữ liệu và phương thức của một lớp khác – lớp cha (siêu lớp - superclass). 

   Như vậy việc tạo một lớp mới từ một lớp đã biết sao cho các thành phần (fields và methods) của lớp cũ cũng sẽ thành các thành phần (fields và methods) của lớp mới. Khi đó ta gọi lớp mới là lớp dẫn xuất (derived class) từ lớp cũ (superclass). Có thể lớp cũ cũng là lớp được dẫn xuất từ một lớp nào đấy, nhưng đối với lớp mới vừa tạo thì lớp cũ đó là một lớp siêu lớp trực tiếp (immediate supperclass).

Dùng từ khóa extends để chỉ lớp dẫn xuất.

Ví dụ:
// super class B
class B{
 // …
}
// sub class A
class A extends B
{
 //…
}
1.2. Khái báo phương thức chồng
      Tính kế thừa giúp cho các lớp con nhận được các thuộc tính/phương thức public và protected của lớp cha. Đồng thời cũng có thể thay thế các phương thức của lớp cha bằng cách khai báo chồng. Chẳng hạn phương thức tinhgiaban() áp dụng trong lớp xega sẽ cho kết quả gấp 2.5 lần chi phí sản xuất thay vì gấp 2 chi phí sản xuất giống như trong lớp xemay.

Ví dụ:
public class xega extends xemay
{
public xega()
{ ... }

public xega(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx);
{
  this.nhasx = s_nhasx;
  this.model = s_model;
  this.chiphisx = f_chiphisx;
  this.thoigiansx = i_thoigiansx;
  this.so = 0;
}

public float tinhgiaban()
{
   return 2.5 * chiphisx;
 }
}

Java cung cấp 3 tiền tố/từ khóa để hỗ trợ tính kế thừa của lớp:
- public: lớp có thể truy cập từ các gói, chương trình khác.
- final: Lớp hằng, lớp không thể tạo dẫn xuất (không thể có con), hay đôi khi người ta gọi là lớp “vô sinh”.
- abstract: Lớp trừu tượng (không có khai báo các thành phần và các phương thức trong lớp trừu tượng). Lớp dẫn xuất sẽ khai báo, cài đặt cụ thể các thuộc tính, phương thức của lớp trừu tượng.

Chú ý: Trong Java không cho phép đa kế thừa, nghĩa là 1 lớp con chỉ kế thừa duy nhất từ 1 lớp cha (khác với C++), ngược lại 1 lớp cha có thể cho phép nhiều lớp con kế thừa.

2. Đa hình (polymorphism)
   Tính đa hình cho phép cài đặt các lớp dẫn xuất khác nhau từ một lớp nguồn. Một đối tượng có thể có nhiều kiểu khác nhau gọi là tính đa hình.

Ví dụ:
class A_Object
{
  //…
  void method_1()
  {
   //…
  }
}

class B_Object extends A_Object
{
   //…
   void method_1()
  {
    //…
  }
}

class C
{
  public static void main(String[] args)
  {
     // Tạo một mảng 2 phần tử kiểu A
     A_Object arr_Object = new A_Object[2];
     B_Object var_1 = new B_Object();
    // Phần tử đầu tiên của mảng arr_Object[0]tham
    // chiếu đến 1 đối tượng kiểu B_Object dẫnxuất
    // từ A_Object
   arr_Object[0] = var_1;
   A_Object var_2;
   for (int i=0; i<2; i++) {
     var_2 = arr_Object[i];
     var_2.method_1();
  }
 }
}

Vòng lặp for trong đoạn chương trình trên:
- Với i = 0 thì biến var_2 có kiểu là B_Object, và lệnh var_2.method_1() sẽ gọi thực hiện phương thức method_1 của lớp B_Object.
- Với i = 1 thì biến var_2 có kiểu là A_Object, và lệnh var_2.method_1() sẽ gọi thực hiện phương thức method_1 của lớp A_Object.

Trong ví dụ trên đối tượng var_2 có thể nhận kiểu A_Object hay B_Object. Hay nói các khác, một biến đối tượng kiểu A_Object như var_2 trong ví dụ trên có thể tham chiếu đến bất kỳ đối tượng nào của bất kỳ lớp con nào của lớp A_Object (ví dụ var_2 có thể tham chiếu đến đối tượng var_1, var_1 là đối tượng của lớp B_Object dẫn xuất từ lớp A_Object). Ngược lại

một biến của lớp con không thể tham chiếu đến bất kỳ đối tượng nào của lớp cha.

3. Phương thức từu tượng và lớp trừu tượng
   Lớp trừu tượng (abtract class) là lớp không có khai báo các thuộc tính thành phần và các phương thức. Các lớp dẫn xuất của nó sẽ khai báo thuộc tính, cài đặt cụ thể các phương thức của lớp trừu tượng.

  Phương thức trừu tượng (abstract method) là phương thức không có nội dung, chỉ được khai báo trong lớp trừu tượng.

Ví dụ:
abstract class A
{
   abstract void method_1(); // phương thức trừu tượng
 }
public class B extends A
{
   public void method_1()
  {
     // cài đặt chi tiết cho phương thức method_1
     // trong lớp con B.
     //…
   }
}

public class C extends A
{
public void method_1()
 {
    // cài đặt chi tiết cho phương thức method_1
    // trong lớp con C.
    //…
  }
}

Lưu ý: Các phương thức được khai báo dùng các tiền tố private và static thì không được khai báo là trừu tượng abstract. Tiền tố private thì không thể truy xuất từ các lớp dẫn xuất, còn tiền tố static thì chỉ dùng riêng cho lớp khai báo mà thôi.

4. Giao diện (interface)
 4.1.Khái niệm interface
     Như chúng ta đã biết một lớp trong java chỉ có một siêu lớp trực tiếp hay một cha duy nhất (đơn thừa kế). Để tránh đi tính phức tạp của đa thừa kế (multi-inheritance) trong lập trình hướng đối tượng, Java thay thế bằng giao tiếp (interface). Một lớp có thể có nhiều giao tiếp (interface) với các lớp khác để thừa hưởng thêm vùng dữ liệu và phương thức của các giao tiếp này.

4.2.Khai báo interface
    Interface được khai báo như một lớp. Nhưng các thuộc tính của interface là các hằng (khai báo dùng từ khóa final) và các phương thức của giao tiếp là trừu tượng (mặc dù không có từ khóa abstract).

   Trong các lớp có cài đặt các interface ta phải tiến hành cài đặt cụ thể các phương thức này.

Ví dụ:
 public interface sanpham
{
    static final String nhasx = “Honda VN”;
    static final String dienthoai = “08-8123456”;
    public int gia(String s_model);
 }
// khai báo 1 lớp có cài đặt interface
public class xemay implements sanpham
{
     // cài đặt lại phương thức của giao diện trong lớp
     public int gia(String s_model)
     {
        if (s_model.equals(“2005”))
           return (2000);
        else
     return (1500);
}
public String chobietnhasx()
{
    return (nhasx);
 }
}

Có một vấn đề khác với lớp là một giao diện (interface) không chỉ có một giao diện cha trực tiếp mà có thể dẫn xuất cùng lúc nhiều giao diện khác (hay có nhiều giao diện cha). Khi đó nó sẽ kế thừa tất cả các giá trị hằng và các phương thức của các giao diện cha. Các giao diện cha được liệt kê thành chuỗi và cách nhau bởi dấu phẩy “,”. Khai báo như sau:

public interface InterfaceName extends interface1, interface2, interface3
{
  //…

5. Lớp nội
   Lớp nội là lớp được khai báo bên trong 1 lớp khác. Lớp nội thể hiện tính đóng gói cao và có thể truy xuất trực tiếp biến của lớp cha.

Ví dụ:
public class A
{
   //…
    int <field_1>
    static class B
   {
      //…
      int <field_2>
     public B(int par_1)
     {
       field_2 = par_1 + field_1;
     }
   }
 }

Trong ví dụ trên thì chương trình dịch sẽ tạo ra hai lớp với hai files khác nhau: A.class và B.class

6. Lớp vô sinh
     Lớp không thể có lớp dẫn xuất từ nó (không có lớp con) gọi là lớp “vô sinh”, hay nói cách khác không thể kế thừa được từ một lớp “vô sinh”. Lớp “vô sinh” dùng để hạn chế, ngăn ngừa các lớp khác dẫn xuất từ nó.

     Để khai báo một lớp là lớp “vô sinh”, chúng ta dùng từ khóa final class. Tất cả các phương thức của lớp vô sinh đều vô sinh, nhưng các thuộc tính của lớp vô sinh thì có thể không vô sinh.

Ví dụ:
public final class A
{
    public final int x;
    private int y;
    public final void method_1()
    {
       //…
    }
public final void method_2()
  {
    //…
   }
 

[Tự học lập trình Java] Bài 5: Lớp (class) và đối tượng (object) trong Java

1. Đối tượng và lớp
1.1. Lớp (class)
a. Khái niệm
    Chúng ta có thể xem lớp như một khuôn mẫu (template) của đối tượng (Object). Trong đó bao gồm dữ liệu của đối tượng (fields hay properties) và các phương thức(methods) tác động lên thành phần dữ liệu đó gọi là các phương thức của lớp. Các đối tượng được xây dựng bởi các lớp nên được gọi là các thể hiện của lớp (class instance).

b. Khai báo/định nghĩa lớp
 [access rights(tiền tố)] class <ClassName>
 {
      <kiểu dữ liệu> <field_1>;
      <kiểu dữ liệu> <field_2>;
     constructor
     method_1
     method_2
     ...
}

Trong đó:
  - class: là từ khóa của java
  - ClassName: là tên chúng ta đặt cho lớp
  - field_1, field_2: các thuộc tính, các biến, hay các thành phần dữ liệu của lớp.
  - constructor: là sự xây dựng, khởi tạo đối tượng lớp.
  - method_1, method_2: là các phương thức/hàm thể hiện các thao tác xử lý, tác động lên các thành phần dữ liệu của lớp.
  - access rights: Quyền truy xuất (public, private, protected)

Ví dụ: Khái báo lớp SinhVien

public class SinhVien{
  // khai báo các phương thức và thuộc tính
  …
}

1.2. Đối tượng (object)
  Đối tượng là sự cụ thể hóa của lớp. Đối tượng được khai báo tường mình bằng từ khóa new theo cú pháp:

   ClassName objectName = new ClassName();

Ví dụ: Khái báo đối tượng sinh vien A (A là một sinh viên cụ thể thuộc lớp SinhVien)
          SinhVien A=new SinhVien( );

2. Biến lớp và phương thức lớp
2.1. Thuộc tính - biến lớp (attribute)
   Vùng dữ liệu (fields) hay thuộc tính (properties) của lớp được khai báo bên trong lớp như sau:

class <ClassName>
 {
   // khai báo những thuộc tính của lớp
  <tiền tố> <kiểu dữ liệu> < thuộc tính>;
  //…
 }

Để xác định quyền truy xuất của các đối tượng khác đối với vùng dữ liệu của lớp người ta thường dùng 3 tiền tố sau:
- public: có thể truy xuất từ tất cả các đối tượng khác
- private: một lớp không thể truy xuất vùng private của 1 lớp khác.
- protected: vùng protected của 1 lớp chỉ cho phép bản thân lớp đó và những lớp dẫn xuất từ lớp đó truy cập đến.

Ví dụ: khai báo lớp xemay

public class xemay
{
  public String nhasx;
  public String model;
  private float chiphisx;
  protected int thoigiansx;
  // so luong so cua xe may: 3, 4 so
  protected int so;
  // sobanhxe là biến tĩnh có giá trị là 2 trong tất cả
  // các thể hiện tạo ra từ lớp xemay
  public static int sobanhxe = 2;
}

Chú giải:
  - Thuộc tính “nhasx”, “model”có thể được truy cập đến từ tất cả các đối tượng khác.
  - Thuộc tính “chiphisx” chỉ có thể truy cập được từ các đối tượng có kiểu “xemay”
  - Thuộc tính “thoigiansx”, so có thể truy cập được từ các đối tượng có kiểu “xemay” và các đối tượng của các lớp con dẫn xuất từ lớp “xemay”

Lưu ý: Thông thường để an toàn cho vùng dữ liệu của các đối tượng người ta tránh dùng tiền tố public, mà thường chọn tiền tố private để ngăn cản quyền truy cập đến vùng dữ liệu của một lớp từ các phương thức bên ngoài lớp đó.

2.2. Phương thức (method)
    Hàm hay phương thức (method) trong Java là khối lệnh thực hiện các chức năng, các hành vi xử lý của lớp lên vùng dữ liệu.

a. Khai báo phương thức:

<Tiền tố> <kiểu trả về> <Tên phương thức> (<danh sách đối số>)
{
  <khối lệnh>;
  [return];
}

Để xác định quyền truy xuất của các đối tượng khác đối với các phương thức của lớp người ta thường dùng các tiền tố sau:

- public: phương thức có thể truy cập được từ bên ngoài lớp khai báo.
- protected: có thể truy cập được từ lớp khai báo và những lớp dẫn xuất từ nó.
- private: chỉ được truy cập bên trong bản thân lớp khai báo.
- static: phương thức lớp dùng chung cho tất cả các thể hiện của lớp, có nghĩa là phương thức đó có thể được thực hiện kể cả khi không có đối tượng của lớp chứa phương thức đó.
- final: phương thức có tiền tố này không được khai báo chồng ớ các lớp dẫn xuất.
- abstract: phương thức không cần cài đặt (không có phần source code), sẽ được hiện thực trong các lớp dẫn xuất từ lớp này.
- synchoronized: dùng để ngăn các tác động của các đối tượng khác lên đối tượng đang xét trong khi đang đồng bộ hóa. Dùng trong lập trình miltithreads.

<kiểu trả về>: có thể là kiểu void, kiểu cơ sở hay một lớp.
<Tên phương thức>: đặt theo qui ước giống tên biến.
<danh sách thông số>: có thể rỗng

Lưu ý:
Thông thường trong một lớp các phương thức nên được khai báo dùng từ khóa public, khác với vùng dữ liệu thường là dùng tiền tố private vì mục đích an toàn. Những biến nằm trong một phương thức của lớp là các biến cục bộ (local) và nên được khởia tạo sau khi khai báo.

Ví dụ:
public class xemay
{
  public String nhasx;
  public String model;
  private float chiphisx;
  protected int thoigiansx;
  // so luong so cua xe may: 3, 4 so
  protected int so;
  // là biến tĩnh có giá trị là 2 trong tất cả
  // các thể hiện tạo ra từ lớp xemay
  public static int sobanhxe = 2;
  public float tinhgiaban()
  {
    return 1.5 * chiphisx;
  }
}

b. Khởi tạo một đối tượng (Constructor)
     Contructor thật ra là một loại phương thức đặc biệt của lớp. Constructor dùng gọi tự động khi khởi tạo một thể hiện của lớp, có thể dùng để khởi gán những giá trị măc định. Các constructor không có giá trị trả về, và có thể có tham số hoặc không có tham số. Constructor phải có cùng tên với lớp và được gọi đến dùng từ khóa new.

    Nếu một lớp không có constructor thì java sẽ cung cấp cho lớp một constructor mặc định (default constructor). Những thuộc tính, biến của lớp sẽ được khởi tạo bởi các giá trị mặc định (số: thường là giá trị 0, kiểu luận lý là giá trị false, kiểu đối tượng giá trị null, …)

    Lưu ý: thông thường để an toàn, dễ kiểm soát và làm chủ mã nguồn chương trình chúng ta nên khai báo một constructor cho lớp.

Ví dụ:
public class xemay
{
   //…
   public xemay()
 }

public xemay(String s_nhasx, String s_model, f_chiphisx, int i_thoigiansx, int i_so);
 {
   nhasx = s_nhasx;
   model = s_model;
   chiphisx = f_chiphisx;
   thoigiansx = i_thoigiansx;
   so = i_so;
   // hoặc
   // this.nhasx = s_nhasx;
   // this.model = s_model;
   // this.chiphisx = f_chiphisx;
   // this.thoigiansx = i_thoigiansx;
   // this.so = i_so;
}

}

c. Biến this
    Biến this là một biến ẩn tồn tại trong tất cả các lớp trong ngông ngữ java. Một class trong Java luôn tồn tại một biến this, biến this được sử dụng trong khi chạy và tham khảo đến bản thân lớp chứa nó.

Ví dụ:
<tiền tố> class A
{
   <tiền tố> int <field_1>;
   <tiền tố> String <field_2>;
   // Contructor của lớp A
  public A(int par_1, String par_2)
  {
   this.field_1 = par_1;
   this.field_2 = par_2;
  }

<tiền tố> <kiểu trả về> <method_1>()
{
  // …
}

<tiền tố> <kiểu trả về> <method_2>()
 {
   this.method_1()
   // …
  }
}

d. Khai báo chồng phương thức (overloading method)
    Việc khai báo trong một lớp nhiều phương thức có cùng tên nhưng khác tham số (khác kiểu dữ liệu, khác số lượng tham số) gọi là khai báo chồng phương thức (overloading method).

Ví dụ:
 public class xemay
 {
   // khai báo fields…
   public float tinhgiaban()
   return 2 * chiphisx;
 }

public float tinhgiaban(float huehong)
{
   return (2 * chiphisx + huehong);
 }
}

e. Đặc điểm hướng đối tượng trong java
    Hỗ trợ những nguyên tắc cơ bản của lập trình hướng đối tượng, tất cả các ngôn ngữ lập trình kể cả java đều có ba đặc điểm chung: tính đóng gói (encapsulation), tính đa hình (polymorphism), và tính kế thừa (inheritance).

3. Phương thức finalize()
    Trong java không có kiểu dữ liệu con trỏ như trong C, người lập trình không cần phải quá bận tâm về việc cấp phát và giải phóng vùng nhớ, sẽ có một trình dọn dẹp hệ thống đảm trách việc này. Trình dọn dẹp hệ thống sẽ dọn dẹp vùng nhớ cấp phát cho các đối tượng trước khi hủy một đối tượng.

    Phương thức finalize() là một phương thức đặc biệt được cài đặt sẵn cho các lớp. Trình dọn dẹp hệ thống sẽ gọi phương thức này trước khi hủy một đối tượng. Vì vậy việc cài đặt một số thao tác giải phóng, dọn dẹp vùng nhớ đã cấp phát cho các đối tượng dữ liệu trong phương thức finalize() sẽ giúp cho người lập trình chủ động kiểm soát tốt quá trình hủy đối tượng thay vị giao cho trình dọn dẹp hệ thống tự động. Đồng thời việc cài đặt trong phương thức finalize() sẽ giúp cho bộ nhớ được giải phóng tốt hơn, góp phần cải tiến tốc độ chương trình.

Ví dụ:
class A
 {
   // Khai báo các thuộc tính
   public void method_1()
  {
     //…
   }
   protected void finalize()
  {
    // Có thể dùng để đóng tất cả các kết nối
    // vào cơ sở dữ liệu trước khi hủy đối tượng.
    //…
   }
}

4.Gói (packages)
   Việc đóng gói các lớp lại tạo thành một thư viện dùng chung gọi là package. Một package có thể chứa một hay nhiều lớp bên trong, đồng thời cũng có thể chứa một package khác bên trong.

   Để khai báo một lớp thuộc một gói nào đấy ta phải dùng từ khóa package. Dòng khai báo gói phải là dòng đầu tiên trong tập tin khai báo lớp. Các tập tin khai báo lớp trong cùng một gói phải được lưu trong cùng một thư mục.

Lưu ý: Việc khai báo import tất cả các lớp trong gói sẽ làm tốn bộ nhớ. Thông thường chúng ta chỉ nên import những lớp cần dùng trong chương trình.

Ví dụ:
package phuongtiengiaothong;
class xemay
{
  // …
 }

class xega extends xemay
{
   //…
}

Khi đó muốn sử dụng lớp xemay vào chương trình ta sẽ khai báo như sau:

import phuongtiengiaothong.xemay;

5. Đóng gói (encapsulation)
     Cơ chế đóng gói trong lập trình hướng đối tượng giúp cho các đối tượng dấu đi một phần các chi tiết cài đặt, cũng như phần dữ liệu cục bộ của nó, và chỉ công bố ra ngoài những gì cần công bố để trao đổi với các đối tượng khác. Hay chúng ta có thể nói đối tượng là một thành tố hỗ trợ tính đóng gói.

    Đơn vị đóng gói cơ bản của ngôn ngữ java là class. Một class định nghĩa hình thức của một đối tượng. Một class định rõ những thành phần dữ liệu và các đoạn mã cài đặt các thao tác xử lý trên các đối tượng dữ liệu đó. Java dùng class để xây dựng những đối tượng. Những đối tượng là những thể hiện (instances) của một class.

    Một lớp bao gồm thành phần dữ liệu và thành phần xử lý. Thành phần dữ liệu của một lớp thường bao gồm các biến thành viên và các biến thể hiện của lớp. Thành phần xử lý là các thao tác trên các thành phần dữ liệu, thường trong java người gọi là phương thức. Phương thức là một thuật ngữ hướng đối tượng trong java, trong C/C++ người ta thường dùng thuật ngữ là hàm.

Xem thêm các ví dụ về Class và Object tại đây

--------------------------------------------------- 
Tải ứng dụng Android tại đây:
Đoc thêm các bài khác

Bài 1: Chương trình JAVA đầu tiên
Bài 2: Các kiểu dữ liệu và toán tử trong
Bài 3: Các cấu trúc điều khiển trong Java
Bài 4 : Mảng và chuỗi trong Java
Bài 5: Lớp (class) và đối tượng (object) trong Java
Bài 6:Thừa kế (Inheritance) và đa hình (Polymorphism)
Ví dụ lập trình giao diện đồ họa với Java (GUI)
Ví dụ lập trình kết nối dữ liệu với Java (JDBC)
Ví dụ về lập trình Android 

Ads Links