Đăng nhập :
Quên mật khẩu
Tạo tài khoản
Nội quy diễn đàn
Thảo luận tại “Quy định và hướng dẫn tham gia diễn đàn” bởi mcneil, 22.07.2012
Trạng thái chủ đề: Thảo luận
Tống  Thị Nhung vknyckp user
Tham gia ngày: 09.03.2015
Ngày gửi: 24.03.2015
Bài gửi: 59
Xem: 3,685

Bạn thích bài viết này?

Bạn muốn quảng cáo bài viết này lên Top kết quả tìm kiếm Google? Xem chi tiết dịch vụ seo từ khóa (Aliofiot Ads)

JAVA cơ bản cho android developer

giới thiệu một số kiến thức cơ bản về OOP và ngôn ngữ Java cho những người bắt đầu tìm hiểu Android.

Class-Object

Java là một ngôn ngữ lập trình hướng đối tượng (OOP). Hiểu về Object là mấu chốt để tìm hiểu về kĩ thuật lập trình hướng đối tượng cũng như về Java.
Một đối tượng trong thế giới thực có 2 đặc điểm cơ bản là: trạng thái (state) và hành vi (behavior). Ví dụ, một người có các trạng thái như tên, tuổi, giới tính, màu tóc, chiều cao, đang đói hay không,.. và các hành vi như ăn, ngủ, học tập, làm việc,… Tương tự như vậy, một Object trong lâp trình là một cấu trúc bao gồm các tham số (property) và các hàm, thủ tục (function) nhằm phản ánh đối tượng trong thế giới thực.

Một class (lớp, nhóm) là một nhóm các thực thể có các đặc điểm chung, chẳng hạn lớp họa sĩ là tập hợp những người giỏi vẽ tranh, kiếm sống bằng vẽ tranh,… Trong lập trình, một Class được coi là một “nguyên mẫu”, một “tuyên bố” rằng các đối tượng của lớp đó có những đặc tham số gì, những hành vi chung gì. Trong khi đó, một Object là một “cụ thể hóa” các giá trị tham số, hành vi.
Ví dụ

class Human {
 String name;
 int age;
 int height;
 void grow(int increment) {
 height = height + increment;
 }
}
Human man = new Human();
man.name = "Jack";
man.age = 18;
man.height = 175;
man.grow(5);

Ở đây “Human” là class còn “man” là một object thuộc class “Human”

Vậy phương pháp lập trình hướng đối tượng khác các phương pháp lập trình khác, chẳng hạn lập trình tuần tự như thế nào? lấy một ví dụ đơn giản như sau:

  • Bài toán: xây một ngôi nhà 5 tầng
  • Lập trình tuần tự: Tôi cần xây một ngôi nhà, muốn vậy tôi cần xây một cái móng, sau đó xây 5 tầng nhà trên móng
  • Lập trình OOP: Tôi cần xây 1 móng nhà và 5 tầng nhà, sau đó tôi xây một ngôi nhà gồm các thành phần đó

Hiểu một cách đơn giản, lập trình tuần tự tập trung vào việc phân rã vấn đề thành các logic, nghiệp vụ, từ các logic đó xây dựng các khối chức năng tương ứng phục vụ cho các logic đó. Trong khi đó, lập trình OOP tập trung vào việc mô hình hóa các đối tượng khép kín với các đặc điểm và hành vi riêng, sau đó mới xem xét mối quan hệ giữa các đối tượng, và các logic giữa chúng. Để làm được điều đó, mấu chốt vần đề là suy nghĩ “trừu tượng hóa”, tức là ngay từ đầu, ta có thể định nghĩa một hành vi mà không cần biết cụ thể hành vi đó thực hiện như thế nào, việc cụ thể hóa sẽ được thực hiện ở các bước tiếp theo. Ba đặc điểm chính của OOP là đóng gói, kế thừa và đa hình.

Subclass

Một class có thể có một class con (nhóm nhỏ hơn) kế thừa những đặc điểm của nó đồng thời có những đặc điểm riêng. Class này được gọi là “subclass”, còn class mà nó kế thừa là “superclass”, từ khóa supertrong Java là chỉ vấn đề này.
Ví dụ:

public class Vehicle {
 public Engine engine;
 public void run(){};
}
public class Truck extends Vehicle {
 public Truck(Diesel diesel) {
 this.engine = diesel;
 }
}
public class Car extends Vehicle {
 public Car(Gasoline gasoline) {
 this.engine = gasoline;
 }
}

Lớp xe cộ có các lớp con là xe tải và xe con, chúng đều có động cơ và hành vi chạy. Tuy nhiên xe tải thì có động cơ diesel còn xe con dùng động cơ xăng. Xe tải thì chở hàng hóa, trong khi xe con thì chở người,…

Abstract

Một class được khai báo là abstract (trừu tượng) khi nó có một method được khai báo là abstract. Đây chính là vấn đề khi xây dựng một class ta chưa biết một hành vi được thực hiện như thế nào, hoặc là các subclass thực hiện hành vi đó theo các cách khác nhau. Một subclass kế thừa một abstract class thì phải định nghĩa lại (override) abstract class hoặc là bản thân nó cũng phải là một abstract class.
Ví dụ:

abstract class GraphicObject {
 abstract void draw();
}
class Circle extends GraphicObject {
 void draw() {
 // draw center point
 // draw circle curve
 }
}
class Rectangle extends GraphicObject {
 void draw() {
 // draw 4 point
 // draw line
 }
}
abstract class Polygon extends GraphicObject {
}

Sở dĩ lớp hình đa giác bị tuyên bố là abstract vì ta cũng không thể làm rõ hành vi vẽ hình này như thế nào, việc này sẽ được định nghĩa trong các subclass của nó như hình ngũ giác, hình lục giác,…

Interface

Một interface là một class mà tất cả các method của nó đều là abstract. Nhưng một vấn đề khác quan trọng hơn là Java không cho phép kế thừa từ nhiều superclass nhưng cho phép implement từ nhiều interface. Cũng tương tự như khái niệm abstract một class implement một interface thì phải định nghĩa lại toàn bộ các method trong interface đó.
Ví dụ:

public interface Growable {
 // declare the signature but not the implementation
 void grow(Fertilizer food, Water water);
}
public interface Eatable {
 // another signature with no implementation
 void munch();
}
/**
 * An implementing class must implement all interface methods
 */
public class Beans implements Growable, Eatable {
 @Override
 public void grow(Fertilizer food, Water water) {
 // ...
 }
 @Override
 public void munch() {
 // ...
 }
}

Access levels

Java có các từ khóa tuyên bố giới hạn truy cập là: publicprotectedprivate. Giới hạn truy cập đối với các biến, và các hàm có khai báo quyền truy cập như sau:

Access Levels

Modifier ClassPackageSubclassWorld
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N

Ví dụ một biến khai báo là public có thể được truy cập trong class, package, class con và tất cả các đoạn mã có khai báo import. Trong khi đó một biến khai báo là private thì chỉ được truy cập trong bản thân class và chỉ có thể giao tiếp với bên ngoài thông qua các hàm get/set

Garbage Collection

Java là một ngôn ngữ tự động dọn rác, điều đó có nghĩa là code của bạn không quản lý việc cấp phát và thu hồi bộ nhớ. Java có một cơ chế riêng để làm việc này. Công việc của bạn là khai báo biến, sử dụng nó và thông báo ngừng sử dụng khi không cần nữa. Trong android, các hàm sự kiện như onCreate(), onStart(), … sẽ khai báo các biến mà class sử dụng, sau khi gọi hàm finish(), các biến này sẽ được một cơ chế riêng tự động thu hồi.

Generics

Đây là một kĩ thuật rất hay được sử dụng trong Java, hiểu một cách đơn giản cách làm này nhằm tránh sự nhập nhằng khi khai báo kiểu của một biến bằng cách làm rõ kiểu của các phần tử mảng hoặc định nghĩa lại cấu trúc của phần tử thành một class hoặc interface khác.
Chẳng hạn:

List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0);
// When re-written to use generics, the code does not require casting:
List list = new ArrayList();
list.add("hello");
String s = list.get(0); // no cast

Hoặc một ví dụ khác ở mức độ cao hơn:

HashMap event = HashMap();
// re-written
class Event {
 int time;
 String content;
}
Event event = new Event();

Cách làm này sẽ giúp phát hiện các lỗi lập trình ngay từ sớm hoặc ở ví dụ hai giúp mở rộng code dễ dàng hơn đồng thời làm cho code dễ đọc hơn.

Trên đây là một số kiến thức, ví dụ cơ bản về Java và lập trình OOP. Nó sẽ không ngay lập tức giúp bạn tìm hiểu Android, tuy nhiên sẽ giúp bạn đọc các đoạn code, hiểu về cấu trúc code cũng như phương pháp tiếp cận vấn đề hơn. Ngoài ra bạn cũng nên tìm hiểu về các kiểu dữ liệu trong Java, sử dụng và chuyển đổi giữa các kiểu dữ liệu đó. Một số pattern thường dùng trong Java nói chung và Android nói riêng. Hello Android!

 

 Nguồn:tech.blog.framgia.com

Chủ đề cùng chuyên mục


Thành viên tích cực


Thống kê diễn đàn


Chủ đề:
526
Tin nhắn:
4
Thành viên:
226