• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Bạn biết những gì về OO và SO?

Nơi trao đổi, hỏi đáp về hướng đối tượng (OOP - Object-Oriented Programming), không giới hạn về ngôn ngữ lập trình
Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Bạn biết những gì về OO và SO?

Gửi bàigửi bởi vo_minhdat2007 » T.Năm 18/08/2011 10:59 pm

Theo quan sát của mình, OOP thực sự là một lĩnh vực rất rộng và vô cùng thú vị, mà thậm chí nhiều guru cũng phải... hỏi. Nói cách khác, OOP gần như toán học, rất chặt chẽ về logic và minh bạch về đối tượng. Mở ra chuyên mục OOP, mình mong các bạn có thể cải thiện trình độ và kiến thức lĩnh vực này, có thể viết phần mềm lớn dễ dàng, bẫy lỗi tốt hơn, và hi vọng đạt đến trình độ "nhìn thông báo lỗi biết tại sao, lỗi ở đâu, ...".

Trước hết, mình xin đặt 1 câu hỏi thế này: Không Google hay dùng mẹo gì, với kiến thức của bạn, hãy thử trình bày xem bạn phân biệt giữa OO (Object-Oriented, hướng đối tượng) và SO (Structure-Oriented, hướng cấu trúc) như thế nào? Hiểu biết của bạn về 2 khái niệm này đến đâu? Và theo bạn, OO hay SO có cái gì hay so với cái kia?

Mong là chuyên mục mới này sẽ được thảo luận sôi nổi.

Thân.



Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

Re: Bạn biết những gì về OO và SO?

Gửi bàigửi bởi dazzlingvit » T.Năm 18/08/2011 11:15 pm

1. Ô, mục này mới :D
2. Nói chung lập trình hướng đối tượng hay nhất ở đa hình và kế thừa, còn hướng cấu trúc thì... cũng khó nói. Kiểu như mình không thích lắm cái kiểu biến nào cũng là đối tượng như .NET. Có lẽ lập trình hướng cấu trúc tiện hơn ở chỗ chương trình tạo ra sẽ đơn giản hơn, chạy nhanh hơn (vì đa số là làm việc với các loại dữ liệu "gần với hệ thống" hơn).
3. Mình chả biết so sánh thế nào. Nhìn chung là tuỳ lúc. Mình thích nó "hỗn tạp" 1 tí, vừa hướng đối tượng, vừa hướng cấu trúc được là tốt nhất, linh hoạt hơn. Làm việc với biến "thô" nhiều khi vẫn sướng hơn là đối tượng (tiết kiệm bộ nhớ, chạy nhanh...).

Hình đại diện của người dùng
vuathongtin
Điều hành viên
Điều hành viên
Bài viết: 1028
Ngày tham gia: CN 02/05/2010 10:03 pm
Đến từ: Xứ sở DG
Has thanked: 2 time
Been thanked: 105 time
Liên hệ:

Re: Bạn biết những gì về OO và SO?

Gửi bàigửi bởi vuathongtin » T.Năm 18/08/2011 11:28 pm

OO rộng hơn SO vì OO có thêm các phương thức (hành vi)
Bùi Thành Nhân
CNTT-Sở Thông tin & Truyền thông tỉnh Phú Yên
giasulaptrinh.com
Skype:vuathongtin

Hình đại diện của người dùng
dazzlingvit
Guru
Guru
Bài viết: 959
Ngày tham gia: T.Ba 18/01/2011 10:21 am
Đến từ: Sinh ra từ hư vô, sống trong thế giới ảo...
Has thanked: 7 time
Been thanked: 112 time
Liên hệ:

Re: Bạn biết những gì về OO và SO?

Gửi bàigửi bởi dazzlingvit » T.Sáu 19/08/2011 12:06 am

Lập trình hướng đối tượng "thuần chủng" (như .NET, Java) thì không có các hàm, biến, hằng toàn cục. Vậy đâu thể nói là rộng hơn được.

Hình đại diện của người dùng
TheDark
Guru
Guru
Bài viết: 188
Ngày tham gia: T.Năm 04/11/2010 3:56 pm
Đến từ: Mang Thít - Vĩnh Long
Has thanked: 6 time
Been thanked: 33 time

Re: Bạn biết những gì về OO và SO?

Gửi bàigửi bởi TheDark » T.Sáu 19/08/2011 6:03 am

Ở sau lại không có!
một biến được khai báo static thì có thể gọi ở bất cứ đâu. Tương tự với hàm,hằng,thủ tục,... thậm chí đối tượng con.
Như vậy không toàn cục thì là j? Chỉ là tên nó dài hơn thôi (dài nhưng logic).
VD:
Tạo ra class Screen với static Width, Height. Bạn có thể gọi nó bất kì đâu: Screen.width ; Screen.Height
P/s: Biến, hằng, hàm,... với từ khóa static có thể gọi mà không cần khởi tạo đối tượng.

Hình đại diện của người dùng
vo_minhdat2007
Quản trị
Quản trị
Bài viết: 2227
Ngày tham gia: CN 17/07/2005 1:40 am
Has thanked: 13 time
Been thanked: 87 time
Liên hệ:

Re: Bạn biết những gì về OO và SO?

Gửi bàigửi bởi vo_minhdat2007 » T.Sáu 19/08/2011 7:56 am

TheDark đã viết:P/s: Biến, hằng, hàm,... với từ khóa static có thể gọi mà không cần khởi tạo đối tượng.


Đúng, nhưng cũng nguy hiểm :D Trừ khi nắm thật chắc là mình cần nó mang giá trị null trong suốt chương trình với vai trò gì đó, không thì tốt nhất khởi tạo giá trị cho nó!
Nhưng không cần static, biến public cũng được quyền không khởi tạo luôn, biến private nằm ngoài thủ tục (tức biến toàn cục của class) cũng vậy.

dazzlingvit đã viết:Lập trình hướng đối tượng "thuần chủng" (như .NET, Java) thì không có các hàm, biến, hằng toàn cục. Vậy đâu thể nói là rộng hơn được.


Phải chăng ý dazzlingvit nói là không thể đặt biến vào Module rồi gọi thoải mái như VB6? Chứ các biến public và public static vẫn truy cập từ mọi nơi được mà.

dazzlingvit đã viết:Mình thích nó "hỗn tạp" 1 tí, vừa hướng đối tượng, vừa hướng cấu trúc được là tốt nhất, linh hoạt hơn. Làm việc với biến "thô" nhiều khi vẫn sướng hơn là đối tượng (tiết kiệm bộ nhớ, chạy nhanh...).


Là sao nhỉ? OOP vẫn có các kiểu primitive không phải là object nếu như bạn muốn mà?

Hình đại diện của người dùng
alexanderdna
Guru
Guru
Bài viết: 214
Ngày tham gia: T.Ba 14/07/2009 11:13 am
Đến từ: Sài Gòn
Has thanked: 3 time
Been thanked: 15 time

Re: Bạn biết những gì về OO và SO?

Gửi bàigửi bởi alexanderdna » T.Sáu 19/08/2011 8:10 am

.NET (cũng như Java) đều hỗ trợ biến "thô". Nhưng chúng được "phù phép" để có những thuộc tính và hành vi của đối tượng. Do vậy mà người lập trình nhìn vào sẽ thấy đâu đâu cũng là đối tượng. Đó là một sự thống nhất để công việc được thực hiện thuận lợi hơn.

Tất cả các kiểu primitive của .NET, không tính String, đều là kiểu giá trị. Những biến thuộc kiểu giá trị lưu trữ tất cả dữ liệu ngay tại vị trí của nó luôn, chớ không phải xin cấp phát ở heap rồi tham chiếu đến đó. Việc truy cập các trường (field) của kiểu giá trị và kiểu tham chiếu là như nhau. Tuy nhiên, khi cần gọi một phương thức của biến kiểu giá trị, cần phải nạp địa chỉ của nó rồi mới gọi được. Việc nạp địa chỉ này có khi rất tổn hao năng lực điện toán. Do vậy, kiểu giá trị chỉ nên dùng khi người ta cần dùng các trường dữ liệu là chính, còn phương thức thì không có hoặc ít, ít gọi.

Hình đại diện của người dùng
nhochoclaptrinh
Thành viên danh dự
Thành viên danh dự
Bài viết: 512
Ngày tham gia: T.Bảy 28/05/2011 12:10 pm
Đến từ: u!t
Has thanked: 15 time
Been thanked: 83 time
Liên hệ:

Re: Bạn biết những gì về OO và SO?

Gửi bàigửi bởi nhochoclaptrinh » T.Bảy 27/08/2011 7:35 am

Em hay dùng SO vì nó dễ hiểu, từ các hàm, thủ tục đơn lẻ mà kết nối lại tạo thành phần mềm. Còn OO thì em hiểu nó trừu tượng lắm nên chẳng biết nói thế nào cả. Nói chung SO khi làm việc theo nhóm thì khó mà tạo ra chương trình hoàn thiện được. Với OO em thích nhất là tính kế thừa của nó, từ class ban đầu, viết nhiều class tương tác với người dùng và xử lý class đầu để dựng thành chương trình lớn.
Sad eyes never lie


Quay về “Lập trình hướng đối tượng (OOP)”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách