PDF:

Nắm vững lập trình hướng đối tượng nguyên mẫu
Delon Newman
Lập trình viên tự do
Freelance
21 12 2012
JavaScript, ngôn ngữ lập trình giao diện cấp thấp cho trang web, có ở khắp mọi nơi. Khi website
dần trở thành một phần trong cuộc sống hàng ngày, JavaScript ngày càng trở nên phù hợp
hơn. JavaScript là một ngôn ngữ thường bị hiểu lầm, bị xem là một thứ ngôn ngữ đồ chơi hay là
"ngôn ngữ Java™ non nớt". Một trong những tính năng thường bị nói xấu là hệ thống đối tượng
nguyên mẫu của nó. Mặc dù không thể phủ nhận rằng JavaScript có những khiếm khuyết, nhưng
hệ thống đối tượng nguyên mẫu không phải là một trong những khuyết điểm đó. Trong bài này,
hãy tìm hiểu về khả năng to lớn, tính dễ hiểu và tao nhã của lập trình hướng đối tượng nguyên
mẫu của JavaScript.
Thế giới của các đối tượng
Khi bạn bắt đầu một ngày làm việc—lái xe đến cơ quan, ngồi tại bàn để thực hiện một nhiệm vụ,
ăn một bữa ăn, đi bộ qua một công viên—bạn thường có thể thao tác và tương tác với thế giới của
mình mà không cần biết các định luật vật lý chi tiết chi phối nó. Bạn có thể xử lý các hệ thống khác
nhau mà bạn đối phó với chúng mỗi ngày như là các đơn vị hoặc các đối tượng. Bạn đánh giá tính
phức tạp của chúng và thay vào đó nên tập trung vào các tương tác của bạn với chúng.
Lịch sử
Simula, một ngôn ngữ để mô hình hóa, thường được coi là ngôn ngữ hướng đối tượng đầu
tiên. Sau đó, đến Smalltalk, C++, ngôn ngữ Java và C#. Tại thời điểm đó, trong hầu hết các
ngôn ngữ hướng đối tượng, các đối tượng được định nghĩa theo lớp. Sau đó, các nhà phát
triển ngôn ngữ lập trình Self, một hệ thống giống như Smalltalk, đã tạo ra một phương thức
thay thế và trọng lượng nhẹ hơn để định nghĩa các đối tượng được gọi là lập trình dựa trên
nguyên mẫu hoặc lập trình hướng đối tượng nguyên mẫu.
Cuối cùng, JavaScript được phát triển với một hệ thống đối tượng dựa trên nguyên mẫu
(prototype). Tính phổ biến của JavaScript đã đưa các đối tượng dựa trên nguyên mẫu vào
dòng chảy chính. Mặc dù nhiều nhà phát triển cảm thấy khó chịu về điều này, nhưng nhờ vào
việc kiểm tra chặt chẽ hơn nên các hệ thống dựa trên nguyên mẫu có nhiều lợi thế.
Lập trình hướng đối tượng (Object-oriented programming - OOP) cố gắng tạo ra các hệ thống phần
mềm hoạt động một cách mô phỏng, là kỹ thuật mô hình hóa mạnh mẽ và phổ biến rộng rãi trong
phát triển phần mềm. Lập trình hướng đối tượng phổ biến vì nó phản ánh cách chúng ta nhìn thế
giới: như là một tập các đối tượng có thể tương tác với nhau và được thao tác theo nhiều cách khác
nhau. Sức mạnh của lập trình OOP nằm trong hai nguyên tắc cốt lõi của nó:
© Copyright IBM Corporation 2012
Nắm vững lập trình hướng đối tượng nguyên mẫu
Nhẫn hiệu đăng ký
Trang 1 của 11
developerWorks®
ibm.com/developerWorks/vn/
Tính bao đóng (Encapsulation)
Cho phép các nhà phát triển che giấu các hoạt động bên trong của cấu trúc dữ liệu và chỉ lộ ra
các giao diện (interface) tin cậy có thể được dùng để tạo module hay các phần mềm gắn kết.
Nó tương tự như việc ẩn dấu thông tin.
Tính kế thừa (Inheritance)
Mở rộng sức mạnh của sự đóng gói bằng cách cho phép các đối tượng thừa kế các hành vi đã
đóng gói của các đối tượng khác. Nó tương tự như việc chia sẻ thông tin.
Hầu hết các nhà phát triển đều biết rõ những nguyên tắc này vì mọi ngôn ngữ lập trình chính thống
đều hỗ trợ OOP (và thực hiện nó trong nhiều trường hợp). Mặc dù tất cả các ngôn ngữ OOP đều
hỗ trợ hai nguyên tắc cốt lõi, dưới dạng này hay dạng khác, trong nhiều năm qua đã có ít nhất hai
cách khác nhau cơ bản về định nghĩa các đối tượng.
Trong bài này, hãy tìm hiểu về những lợi ích của các mẫu lập trình OOP nguyên mẫu và các mẫu
đối tượng JavaScript.
Nguyên mẫu-là gì? Các lớp và các nguyên mẫu
Một lớp (class) là một khái niệm trừu tượng về các đối tượng định nghĩa các cấu trúc dữ liệu và
các phương thức bên trong nó hoặc là một tập hợp các đối tượng. Mỗi đối tượng là một thể hiện
(instance) của lớp. Các lớp cũng có nhiệm vụ xây dựng các đối tượng lớp theo các định nghĩa của
chúng và (tùy chọn) theo các tham số người dùng.
Một ví dụ cổ điển là lớp Point và lớp con của nó là Point3D để định nghĩa các điểm hai chiều và ba
chiều, tương ứng. Liệt kê 1 (Listing 1) cho thấy các lớp trông như thế này theo mã Java.
Liệt kê 1. Lớp Point của Java
class Point {
private int x;
private int y;
static Point(int x, int y) {
this.x = x;
this.y = y;
}
int getX() {
return this.x;
}
int getY() {
return this.y;
}
void setX(int val) {
this.x = val;
}
void setY(int val) {
this.y = val;
}
}
Point p1 = new Point(0, 0);
p1.getX() // => 0;
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 2 của 11
ibm.com/developerWorks/vn/
developerWorks®
p1.getY() // => 0;
// L#p Point3D là con c#a l#p Point, k# th#a các đ#c tính c#a Point
class Point3D extends Point {
private int z;
static Point3D(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
int getZ() {
return Z;
}
void setZ(int val) {
this.z = val;
}
}
Point3D p2 =
p2.getX() //
p2.getY() //
p2.getZ() //
Point3D(0, 0, 0);
=> 0
=> 0
=> 0
Ngược với định nghĩa đối tượng theo lớp, các hệ thống đối tượng nguyên mẫu hỗ trợ một phương
thức tạo đối tượng trực tiếp hơn. Ví dụ, trong JavaScript một đối tượng là một danh sách các đặc
tính đơn giản. Mỗi đối tượng có liên quan mật thiết với đối tượng cha khác hoặc nguyên mẫu, đối
tượng mà từ đó nó được thừa kế các đặc tính. Bạn có thể bắt chước ví dụ Point trong JavaScript,
như trong Liệt kê 2.
Liệt kê 2. Lớp Point của JavaScript
var point = {
x : 0,
y : 0
};
point.x // => 0
point.y // => 0
// t#o m#t đ#i t##ng m#i t# nguyên m#u Point, k# th#a các đ#c tính c#a Point
point3D = Object.create(point);
point3D.z = 0;
point3D.x // => 0
point3D.y // => 0
point3D.z // => 0
Có một sự khác biệt cơ bản giữa các hệ thống đối tượng nguyên mẫu và cổ điển. Các đối tượng cổ
điển được định nghĩa một cách trừu tượng như là một phần của một nhóm khái niệm và thừa kế
những đặc tính từ các lớp hoặc các nhóm khác của các đối tượng. Ngược lại, các đối tượng nguyên
mẫu được định nghĩa cụ thể là các đối tượng cụ thể và thừa kế hành vi từ các đối tượng cụ thể
khác.
Vì vậy, một ngôn ngữ OOP dựa trên lớp có một tính chất kép, đòi hỏi ít nhất là hai cấu kiện cơ bản:
các lớp và các đối tượng. Như là một kết quả của tính hai mặt này, khi phần mềm dựa trên lớp phát
triển, các hệ thống phân cấp lớp phức tạp có xu hướng phát triển. Nói chung không thể dự báo
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 3 của 11
developerWorks®
ibm.com/developerWorks/vn/
được tất cả các cách mà các lớp sẽ cần được sử dụng các cách đó trong tương lai, vì thế, hệ thống
phân cấp lớp cần được liên tục cấu trúc lại để tạo điều kiện thuận lợi cho các thay đổi.
Các ngôn ngữ dựa trên nguyên mẫu loại bỏ sự cần thiết về tính hai mặt nói trên và tạo điều kiện
thuận lợi cho việc tạo và xử lý trực tiếp các đối tượng. Nếu như không có các đối tượng bị ràng
buộc bởi lớp, có thể tạo ra các hệ thống các đối tượng có ràng buộc lỏng lẻo hơn để trợ giúp duy trì
tính mô đun và làm giảm sự cần thiết phải cấu trúc lại.
Ngoài ra, việc có thể trực tiếp định nghĩa các đối tượng sẽ bổ sung khả năng to lớn và tính dễ hiểu
cho việc tạo và xử lý đối tượng. Ví dụ, trong Liệt kê 2, bạn có thể chỉ cần khai báo đối tượng point
của mình với một dòng: var point = { x: 0, y: 0 };. Với một dòng này, bạn có một đối tượng
làm việc đầy đủ, thừa kế hành vi từ Object.prototype của JavaScript, chẳng hạn như phương thức
toString. Để mở rộng hành vi của đối tượng của mình, bạn chỉ cần khai báo một đối tượng khác với
point là nguyên mẫu của nó. Ngược lại, ngay cả với ngôn ngữ OOP cổ điển ngắn gọn nhất, trước
tiên bạn sẽ phải định nghĩa một lớp, sau đó khởi tạo nó trước khi bạn có một đối tượng có thể thao
tác được. Để thừa kế, bạn sẽ phải định nghĩa một lớp khác để mở rộng lớp đầu tiên này.
Mẫu của nguyên mẫu là khái niệm còn đơn giản hơn. Là con người, chúng ta thường nghĩ về các
nguyên mẫu. Ví dụ, trong một bài viết trên blog của Steve Yegge "Các mẫu thiết kế đa năng" (xem
phần Tài nguyên), ông trích dẫn ví dụ của một cầu thủ bóng đá Mỹ—là Emmitt Smith—người mà
với tốc độ của mình, sự nhanh nhẹn và sức mạnh di chuyển trở thành nguyên mẫu cho tất cả các
cầu thủ bóng đá mới trong Liên đoàn bóng đá quốc gia (NFL). Sau đó, khi một cầu thủ tấn công
mới nổi là LT được chọn, các nhà bình luận nói rằng:
"LT có cặp giò giống Emmitt."
"Anh ấy có thể cày như Emmitt."
"Tuy nhiên, anh ấy chạy một dặm chỉ trong năm phút!"
Các nhà bình luận đang mô hình hóa một đối tượng mới— là LT—dưới dạng một đối tượng nguyên
mẫu, là Emmitt Smith. Trong JavaScript, một mô hình như vậy sẽ trông giống như Liệt kê 3.
Liệt kê 3. Mô hình JavaScript
var emmitt = {
// ... khai báo các đ#c tính (properties)
};
var lt = Object.create(emmitt);
// ... khai báo các đ#c tính khác cho đ#i t##ng lt
Bạn có thể đối chiếu ví dụ này với việc mô hình hóa cổ điển, ở đó bạn có thể định nghĩa một lớp
RunningBack (cầu thủ tấn công) thừa kế từ lớp FootballPlayer (cầu thủ bóng đá). Lớp lt và emmitt
sẽ là các thể hiện của lớp RunningBack. Trong mã Java các lớp này có thể trông như Liệt kê 4.
Liệt kê 4. Ba lớp Java
class FootballPlayer {
private string name;
private string team;
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 4 của 11
ibm.com/developerWorks/vn/
developerWorks®
static void FootballPlayer() { }
string getName() {
return this.name;
}
string getTeam() {
return this.team;
}
void setName(string val) {
this.name = val;
}
void setTeam(string val) {
this.team = val;
}
}
class RunningBack extends FootballPlayer {
private bool offensiveTeam = true;
bool isOffesiveTeam() {
return this.offensiveTeam;
}
}
RunningBack emmitt = new RunningBack();
RunningBack lt
= new RunningBack();
Mô hình cổ điển đi kèm với chi phí hoạt động dựa trên khái niệm nhiều hơn đáng kể, nhưng không
có sự kiểm soát mượt mà trên các thể hiện lớp emmitt và lt mà bạn nhận được với mô hình
nguyên mẫu. (Công bằng mà nói, lớp FootballPlayer không cần thiết 100%; nó có mặt ở đây để
so sánh với ví dụ tiếp theo). Đôi khi, chi phí hoạt động này có thể có ích, nhưng thường nó chỉ là
gánh nặng thôi.
Khá dễ dàng để mô phỏng mô hình hóa cổ điển với một hệ thống đối tượng nguyên mẫu. (Phải thừa
nhận rằng, cũng có thể làm ngược lại, mặc dù có lẽ không dễ dàng gì). Ví dụ, bạn có thể tạo ra một
đối tượng footballPlayer với một đối tượng runningBack khác có thừa kế từ footballPlayer làm
nguyên mẫu của nó. Trong JavaScript, các đối tượng này sẽ trông như Liệt kê 5.
Liệt kê 5. Mô hình hóa JavaScript
var footballPlayer = {
name : "";
team : "";
};
var runningBack = Object.create(footballPlayer);
runningBack.offensiveTeam = true;
Bạn cũng có thể tạo ra một đối tượng lineBacker (cầu thủ hậu vệ) khác có thừa kế từ
footballPlayer, như trong Liệt kê 6.
Liệt kê 6. Thừa kế đối tượng
var lineBacker = Object.create(footballPlayer);
lineBacker.defensiveTeam = true;
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 5 của 11
developerWorks®
ibm.com/developerWorks/vn/
Như trong Liệt kê 7, bạn có thể bổ sung hành vi cho cả hai đối tượng lineBacker và runningBack
bằng cách bổ sung đối tượng footballPlayer.
Liệt kê 7. Bổ sung các hành vi
footballPlayer.run = function () { this.running = true };
lineBacker.run();
lineBacker.running; // => true
Trong ví dụ này, bạn đang xử lý đối tượng footballPlayer như một lớp. Bạn cũng có thể tạo các
đối tượng cho Emmitt và LT, như trong Liệt kê 8.
Liệt kê 8. Tạo các đối tượng
var emmitt = Object.create(runningBack);
emmitt.superbowlRings = 3;
var lt = Object.create(emmitt);
lt.mileRun = '5min';
Do đối tượng lt thừa kế từ đối tượng emmitt, nên thậm chí bạn có thể xử lý đối tượng emmitt như
một lớp, như trong Liệt kê 9.
Liệt kê 9. Thừa kế và các lớp
emmitt.height = "6ft";
lt.height // => "6ft";
Nếu bạn đã dùng thử các ví dụ trên theo một ngôn ngữ có các đối tượng cổ điển, tĩnh (như mã
Java), bạn sẽ phải sử dụng mẫu của trình trang trí, còn đòi hỏi nhiều chi phí hoạt động dựa trên khái
niệm hơn và bạn vẫn không thể thừa kế trực tiếp từ đối tượng emmitt như là một cá thể. Ngược lại,
mẫu các đặc tính được sử dụng trong các ngôn ngữ dựa trên nguyên mẫu như JavaScript cho phép
bạn trang trí cho các đối tượng của mình theo một cách tự do hơn nhiều.
JavaScript không phải là ngôn ngữ Java
JavaScript và một số tính năng của nó, chẳng hạn như các đối tượng nguyên mẫu, đã là nạn nhân
của những sai lầm và những quyết định tiếp thị đáng tiếc trong lịch sử. Ví dụ, Brendan Eich (cha
đẻ của JavaScript) trình bày trong một mục blog tại sao cần có một ngôn ngữ mới: "mệnh lệnh của
quản lý kỹ thuật cấp cao hơn là ngôn ngữ này phải 'trông giống như Java'. Điều đó loại trừ Perl,
Python và Tcl, cùng với Scheme". Vì vậy, JavaScript trông giống như mã Java và tên của nó được
nối với ngôn ngữ Java, mà điều đó đang gây nhầm lẫn cho bất cứ ai không quen với một hoặc cả
hai ngôn ngữ đó. Mặc dù nhìn bề ngoài JavaScript trông giống như ngôn ngữ Java, nhưng ở một
mức độ sâu hơn nó không có gì giống Java cả—dẫn đến các hy vọng bị bỏ lỡ. Theo Brendan Eich:
Tôi không tự hào, nhưng tôi hạnh phúc vì tôi đã chọn các hàm hạng nhất Schemeish và các nguyên mẫu Self-ish (mặc dù là số ít) làm các thành phần chính. Các ảnh
hưởng của Java, đặc biệt không chỉ là các lỗi y2k Date (Ngày tháng năm 2000) mà
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 6 của 11
ibm.com/developerWorks/vn/
developerWorks®
còn điểm khác biệt giữa nguyên thủy và đối tượng (ví dụ, string so với String), chỉ là
không may mà thôi.
Các hy vọng không được thỏa mãn khó giải quyết được. Khi bạn mong chờ một ngôn ngữ y-doanh
nghiệp, tĩnh như ngôn ngữ Java, nhưng kết thúc bằng một ngôn ngữ có cú pháp giống như mã Java
nhưng hoạt động giống như Scheme và Self, bạn bị bất ngờ là đúng. Nếu bạn thích các ngôn ngữ
động, điều này sẽ là một bất ngờ được chào đón; nếu bạn không thích hoặc chúng không quen
thuộc với bạn, thì việc lập trình bằng JavaScript có thể không dễ chịu.
JavaScript cũng có một số khuyết điểm thực sự: các biến toàn cầu bắt buộc, các vấn đề phạm vi,
việc chèn dấu chấm phẩy, các hành vi không phù hợp == và nhiều hơn nữa. Đối với những vấn đề
này, các lập trình viên JavaScript đã phát triển một mảng các mẫu và các cách thực hành tốt nhất
để hỗ trợ phát triển phần mềm tin cậy. Phần tiếp theo thảo luận về một vài mẫu cần sử dụng và một
số mẫu nên tránh, để sử dụng tốt nhất hệ thống đối tượng nguyên mẫu của JavaScript.
Các mẫu đối tượng JavaScript
Để JavaScript trông giống như Java, các nhà thiết kế đã cố gắng thêm vào hàm khởi tạo
(constructor) thường thấy trong các ngôn ngữ cổ điển nhưng không nhất thiết phải có trong một
ngôn ngữ nguyên mẫu. Hãy xem xét mẫu dưới đây, nơi một đối tượng có thể được khai báo bằng
cách sử dụng một hàm khởi tạo như trong Liệt kê 10.
Liệt kê 10. Khai báo một đối tượng
function Point(x, y) {
this.x = x;
this.y = y;
}
Sau đó, bạn có thể tạo đối tượng này bằng cách sử dụng từ khóa new, tương tự như mã Java, như
trong Liệt kê 11.
Liệt kê 11. Tạo đối tượng
var p = new Point(3, 4);
p.x // => 3
p.y // => 4
Trong JavaScript, các hàm cũng chính là các đối tượng, do đó, có thể thêm các phương thức vào
nguyên mẫu của hàm khởi tạo, như trong Liệt kê 12.
Liệt kê 12. Thêm một phương thức
Point.prototype.r = function() {
return Math.sqrt((this.x * this.x) + (this.y * this.y));
};
Cùng với các hàm khởi tạo, bạn có thể dùng một mẫu thừa kế giả cổ điển (pseudoclassical), như
trong Liệt kê 13.
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 7 của 11
developerWorks®
ibm.com/developerWorks/vn/
Liệt kê 13. Mẫu thừa kế giả cổ điển
function Point3D(x, y, z) {
this.x = x;
this.y = y;
this.z = z;
}
Point3D.prototype = new Point(); // th#a k# t# Point
Point3D.prototype.r = function() {
return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z));
};
Mặc dù đây chắc chắn là một cách hợp lệ để định nghĩa các đối tượng theo JavaScript (và đôi khi
có thể là cách tốt nhất), mẫu này có vẻ hơi rắc rối. Nó thêm dữ liệu thừa không cần thiết vào mã
của bạn khi được so sánh để nắm vững mẫu của nguyên mẫu và định nghĩa các đối tượng hoàn
toàn theo phong cách này. Để tóm tắt, bạn định nghĩa đối tượng của mình bằng cách sử dụng một
đối tượng bằng chữ, như trong Liệt kê 14.
Liệt kê 14. Định nghĩa đối tượng
var point = {
x: 1,
y: 2,
r: function () {
return Math.sqrt((this.x * this.x) + (this.y * this.y));
}
};
Sau đó, như trong Liệt kê 15, bạn thừa kế bằng cách sử dụng Object.create.
Liệt kê 15. Thừa kế bằng cách sử dụng Object.create
var point3D = Object.create(point);
point3D.z = 3;
point3D.r = function() {
return Math.sqrt((this.x * this.x) + (this.y * this.y) + (this.z * this.z));
};
Phương thức tạo đối tượng này có vẻ tự nhiên trong JavaScript và làm nổi bật những ưu điểm của
các đối tượng nguyên mẫu của nó. Tuy nhiên, một nhược điểm của cả hai mẫu của nguyên mẫu
và mẫu giả cổ điển là chúng không cung cấp bất kỳ thành phần riêng tư nào. Đôi lúc tính riêng tư
không quan trọng và đôi khi nó lại rất quan trọng. Liệt kê 16 hiển thị một mẫu cho phép bạn tạo
các đối tượng với các thành phần riêng tư. Trong cuốn sách JavaScript: Các điều tốt, Douglas
Crockford gọi mẫu này là mẫu thừa kế chức năng.
Liệt kê 16. Mẫu thừa kế chức năng
var point = function(spec) {
var that = {};
that.getTimesSet = function() {
return timesSet;
};
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 8 của 11
ibm.com/developerWorks/vn/
developerWorks®
that.getX = function() {
return spec.x;
};
that.setX = function(val) {
spec.x = val;
};
that.getY = function() {
return spec.y;
};
that.setY = function(val) {
spec.y = val;
};
return that;
};
var point3D = function(spec) {
var that = point(spec);
that.getZ = function() {
return spec.z;
};
that.setZ = function(val) {
spec.z = val;
};
return that;
};
Một hàm khởi tạo dùng để tạo ra các đối tượng của bạn, các thành viên riêng tư được định nghĩa
bên trong và các cá thể được tạo ra bằng cách chuyển một spec vào hàm khởi tạo như trong Liệt
kê 17.
Liệt kê 17. Tạo các thể hiện
var p = point({ x: 3, y: 4 });
p.getX(); // => 3
p.setX(5);
var p2 = point3D({ x: 1, y: 4, z: 2 });
p.getZ(); // => 2
p.setZ(3);
Kết luận
Bài này chỉ bàn sơ qua mặt ngoài của việc lập trình hướng đối tượng nguyên mẫu. Nhiều ngôn ngữ
khác, chẳng hạn như Self, Lua, Io và REBOL cũng triển khai thực hiện mẫu của nguyên mẫu. Mẫu
của nguyên mẫu có thể được thực hiện theo bất kỳ ngôn ngữ nào, gồm cả các ngôn ngữ định kiểu
tĩnh. Nó cũng có ích khi thiết kế bất kỳ hệ thống nào đòi hỏi tính dễ hiểu và linh hoạt.
Lập trình hướng đối tượng nguyên mẫu cung cấp tính dễ hiểu và khả năng to lớn và đáp ứng các
mục tiêu của lập trình hướng đối tượng với sự rõ ràng và sự tao nhã rất cao. Lập trình hướng đối
tượng nguyên mẫu nằm trong số các ưu điểm của JavaScript, chứ không phải là các khuyết điểm
của nó.
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 9 của 11
developerWorks®
ibm.com/developerWorks/vn/
Tài nguyên
Học tập
• Blog của Brian Eich: Xem thêm trang blog phổ biến này để biết thông tin cơ bản về
JavaScript.
• Đọc blog Mẫu thiết kế đa năng và Thực hiện trong Vương quốc của các danh từ của Steve
Yegge.
• JavaScript: Các điểm tốt cho thấy một tập con của mã JavaScript là đáng tin cậy, dễ đọc và
dễ bảo trì hơn so với ngôn ngữ đó nói chung.
• Trên Wikipedia, hãy đọc các tổng quan về:
• Lập trình dựa trên nguyên mẫu
• Lập trình hướng đối tượng
• Vùng phát triển Web trên developerWorks cung cấp tài nguyên bạn cần để nâng cao các kỹ
năng của mình trong lĩnh vực phát triển web. Xem thư viện kỹ thuật phát triển web với một
loạt các bài báo kỹ thuật và các lời khuyên, các hướng dẫn, các tiêu chuẩn và các sách Đỏ
của IBM (IBM Redbooks).
• Các webcast và các sự kiện kỹ thuật trên developerWorks: Theo sát với công nghệ trong các
phiên này.
• developerWorks trên Twitter: Tham gia ngày hôm nay để theo dõi các mẩu tin ngắn trên
developerWorks.
• Các podcast trên developerWorks: Nghe các cuộc phỏng vấn và các cuộc thảo luận thú vị
dành cho các nhà phát triển phần mềm.
• Các trình diễn theo yêu cầu trên developerWorks: Xem các trình diễn trải rộng từ cài đặt và
thiết lập sản phẩm cho người mới bắt đầu đến các chức năng tiên tiến cho các nhà phát triển
có kinh nghiệm.
Lấy sản phẩm và công nghệ
• Ngôn ngữ lập trình Self: Tải về Self, trong đó gồm một ngôn ngữ lập trình, một bộ sưu tập
của các đối tượng được định nghĩa bằng ngôn ngữ Self và một môi trường lập trình được xây
dựng bằng Self để viết các chương trình Self.
• Đổi mới dự án phát triển tiếp theo của bạn với phần mềm dùng thử IBM.
Thảo luận
• Hồ sơ developerWorks: Tạo hồ sơ của bạn hôm nay và thiết lập một danh sách theo dõi.
• Cộng đồng developerWorks: Kết nối với những người dùng developerWorks khác trong khi
khám phá các blog, các diễn đàn, các nhóm và các wiki dựa vào nhà phát triển.
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 10 của 11
ibm.com/developerWorks/vn/
developerWorks®
Đôi nét về tác giả
Delon Newman
Từ năm 1997 đến nay, Delon Newman xem việc lập trình là một niềm vui. Ông bắt
đầu với C và C++ và sau đó đã chuyển sang HTML, Perl và JavaScript. Ông đã làm
việc trong lĩnh vực CNTT từ năm 1999 với tư cách là nhân viên hỗ trợ kỹ thuật, thiết
kế đồ họa, thiết kế web, quản trị viên hệ thống, lập trình viên, phân tích viên và kỹ sư
phần mềm. Trong quá trình làm việc cho công ty riêng của mình và là một nhà tư vấn,
Delon đã khám phá nhiều ngôn ngữ và môi trường như Ruby, Python, Java, C #, PHP,
Smalltalk, Lisp, Haskell, Erlang, Scala và Clojure. Bạn có thể liên hệ với Delon tại địa
chỉ email [email protected].
© Copyright IBM Corporation 2012
(www.ibm.com/legal/copytrade.shtml)
Nhẫn hiệu đăng ký
(www.ibm.com/developerworks/vn/ibm/trademarks/)
Nắm vững lập trình hướng đối tượng nguyên mẫu
Trang 11 của 11