- 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?
JAVA cơ bản cho android developer
- 12 cách giao tiếp mà bạn nên biết
- Học cách làm giàu từ 2 bàn tay trắng
- 5 điều về sạc pin smartphone mà bạn chưa biết
- Hướng dẫn cắt tách nhạc từ Video trên Youtube
- Sửa lỗi Bluetooth không làm việc trên Windows 7
- 7 cách nói lưu loát tiếng hàn
- phá khóa màn hình iPhone 4s khi mất mật khẩu
- Học tốt cần tuân thủ 6 yêu cầu sau
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 super
trong 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à: public
, protected
, private
. 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 | Class | Package | Subclass | World |
---|---|---|---|---|
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ủ đề trước
Chủ đề cùng chuyên mục
Thành viên tích cực
-
support
Upload: 57 -
admin
Upload: 18 -
nguyenminh
Upload: 93 -
vknyckp
Upload: 218 -
duytungrp
Upload: 9 -
ddhiep
Upload: 679 -
hue_nguyen
Upload: 271 -
tuananh86
Upload: 4 -
thaile
Upload: 17 -
hoctiengducgiaotiep
Upload: 3 -
quynhanh
Upload: 24 -
thuyanh1990
Upload: 4