Trang 2 / 34 FirstFirst 123457 ... LastLast
Hiển thị kết quả từ 11 đến 20 / 339
  1. #11
    Tham gia
    05-09-2002
    Location
    Turino
    Bài viết
    757
    Like
    0
    Thanked 67 Times in 9 Posts
    Thế lập trình hướng đối tượng cung cấp cho lập trình viên những khả năng gì?
    Ngôn ngữ lập trình hướng đối tượng đã xây dựng một mối liên kết khắng khít giữa cấu trúc dữ liệu và những phương thức điều tác chúng. Điều quan trọng là khi tiếp cận với lập trình hướng đối tượng những gì bạn phải nghĩ đến không còn là cấu trúc dữ liệu và các hàm điều tác. Thay vào đó bạn phải luôn nghĩ đến cái gọi là "đối tượng" (object).

    Hầu hết mọi người khi nhìn vào một chiếc xe hơi, họ không nghĩ về những thông tin mà nó có và làm cách nào để điều quản những thông tin ấy. Họ nghĩ về các bánh xe, bộ truyền động, hộp số… Họ nghĩ về cách cho xe chạy, dừng lại, tăng tốc… Họ nghĩ về đường đi, cảnh sát công lộ và những vé phạt quá tốc độ… Nói ngắn gọn là hầu hết mọi người nghĩ đến những sự vật (things) và những sự vật đó làm những gì. Thực tế, đây là cách mà loài người nghĩ về mọi thứ. Quá trình tiến hoá hàng chục triệu năm đã dạy chúng ta cách nhìn về một thế giới như được lắp đầy bởi những sự vật. Một vài trong số những sự vật đó chúng ta có thể ăn, một số khác lại ăn chúng ta…

    Một cách lý tưởng, phần mềm của chúng ta được mô hình hóa rất giống với thế giới thực. Nhìn theo góc độ này, những chương trình của chúng ta trở nên dễ hiểu hơn và dễ bảo trì hơn. Những đối tượng trong thế giới thực có những đặc tính và những hành vi riêng, đối tượng trong chương trình cũng vậy.

    Bây giờ chúng ta xem những khác biệt trong ngôn ngữ lập trình hướng đối tượng mà cụ thể là C++. Hãy xem đoạn mã sau:

    #include <iostream.h>
    class Employee
    {
    public:
    Employee(int salary, int level);
    ~Employee(){}

    void GiveARaise(double pctg);
    int GetSalary() const {return mSalary;}
    private:
    int mSalary;
    int mLevel;
    };
    Employee::Employee(int salary, int
    level):mSalary(salary),mLevel(level)
    {
    cout<<"Initializing Employee with salary :"<<mSalary<<endl;
    }
    void Employee::GiveARaise(double pctg)
    {
    int increment = int(mSalary*pctg);
    cout<<"Incrementing salary by "<<increment<<endl;
    mSalary+=increment;
    }
    int main()
    {
    Employee Emp(50000,3);
    Cout<<"Emp''s salary :"<<Emp.GetSalary()<<endl;
    }

    Trong chương trình trên chúng ta khai báo một lớp (class) có tên là Employee. Một lớp chẳng qua là một kiểu dữ liệu mở rộng. Chúng ta bắt đầu với những kiểu dữ liệu xây dựng sẵn trong C như kiểu int, double, float … nhưng bây giờ chúng ta thêm vào một danh sách bằng cách tạo ra một kiểu dữ liệu mới và sau đó khai báo biến sử dụng kiểu dữ liệu mới này.

    Một kiểu dữ liệu có thể có những hành vi (behavior) và những thuộc tính (atribute). Hành vi được thể hiện bởi những phương thức (method) trong lớp, còn những thuộc tính được đại diện bởi các biến thành viên của lớp. Trong lớp Employee ở trên có 2 biến thành viên: mSalary và mLevel; 4 phương thức: hàm dựng (contructor), hàm hủy (destructor), hàm truy cập (accessor) GetSalary và GiveARaise.

    Hàm dựng dùng để khởi tạo các biến khi đối tượng được tạo ra. Trong ví dụ của chúng ta, hàm dựng làm tác vụ khởi tạo giá trị cho hai biến là mSalary và mLevel.

    Hàm hủy được dùng khi huỷ đối tượng và có tác dụng giải phóng tài nguyên như bộ nhớ mà đối tượng được cấp phát. Trong ví dụ này, hàm hủy không làm gì cả.

    GetSalary chỉ làm công việc trả về giá trị của mSalary.

    GetARaise là hàm thành viên của Employee và nó truy xuất được đến biến cục bộ mSalary. Hàm này được dùng khi bạn muốn tăng lương cho nhân viên.

    " Sử dụng đối tượng Employee như thế nào ?
    Một "khách hàng" (client) của một lớp là bất kỳ đối tượng hay một hàm có gọi đến các phương thức của lớp. Trong trường hợp của chúng ta, hàm main() có gọi đến các phương thức của lớp Employee nên có thể xem hàm main() là một khách hàng của lớp này. Trong hàm main(), chúng ta tạo ra một thể hiện (instance) của lớp Employee.

    Chúng ta xem lại những phân biệt giữa một lớp Employee và một đối tượng Employee cụ thể (giả sử đó là Fred, nhân viên của phòng tiếp thị). Lớp Employee là tổng quát cho tất cả nhân viên, những thuộc tính mà lớp Employee có là gì và hành xử của nó như thế nào? Employee được thể hiện trong C++ là một lớp. Đối với nhân viên cụ thể (Fred chẳng hạn) là một thể hiện của lớp và được đại diện trong C++ bởi một đối tượng.

    " Tại sao lại phải phiền phức đến thế ?
    Bạn đã điều tác được cấu trúc Employee bằng những hàm trong C, vậy tại sao lại phải học những thứ phiền toái chỉ để phục vụ cho cùng một công việc ?
    Một lợi điểm của hướng đối tượng là tạo ra những đối tượng có biên chặt chẽ hơn. Mọi thứ mà chúng ta biết và mọi thứ mà chúng ta làm được bó lại với nhau thành một gói gọn gàng. Ý tưởng này được gọi là bao đóng (encapsulation). Bằng cách bao đóng những phương thức và biến vào trong một thực thể đơn, chúng ta giảm được ức chế tâm lý cho lập trình viên. Những nhà phát triển hướng đối tượng chia giới lập trình hướng đối tượng thành hai loại: nhà cung cấp và khách hàng. Nhà cung cấp chuyên viết các lớp và làm cho nó chạy. Khách hàng kết hợp các thể hiện của những lớp này cho chúng làm việc với nhau.

  2. #12
    Tham gia
    05-09-2002
    Location
    Turino
    Bài viết
    757
    Like
    0
    Thanked 67 Times in 9 Posts
    Trở lại chương trình trên, giới khách hàng không cần biết lương của nhân viên được lưu trữ như thế nào trong lớp Employee. Tất cả những gì mà họ quan tâm là làm sao để có thể lấy được thông tin lương của một nhân viên cụ thể từ lớp Employee, làm sao để cho nhân viên tăng lương (bằng cách gọi phương thức GiveARaise).

    Những phương thức này là một phần trong các giao tiếp (interface) của lớp Employee. Giao tiếp báo cho khách hàng biết những gì mà lớp có thể làm. Họ không thể biết được liệu thông tin lương của nhân viện có được lưu xuống cơ sở dữ liệu hay không, hay chỉ được lưu trong biến thành viên… Tất cả những chức năng bên trong đều không thể thấy được bởi các khách hàng. Khả năng này được gọi là che dấu dữ liệu (data hiding), nó là kết quả của sự bao đóng.

    Ngoài ra, hướng đối tượng còn cung cấp hai lợi điểm rất lớn. Thứ nhất, khách hàng có thể lờ đi những chi tiết bên trong mà lo tập trung vào những thứ khác. Thứ hai, nó cho phép nhà cung cấp có thể thay đổi cách thức làm việc bên trong mà không làm đổ vỡ chương trình của khách hàng. Điều này cho phép phía nhà cung cấp có thể làm cho những lớp của anh ta ngày càng tốt hơn và hiệu quả hơn mà không buộc phía khách hàng phải viết lại mã lệnh.

  3. #13
    Tham gia
    05-09-2002
    Location
    Turino
    Bài viết
    757
    Like
    0
    Thanked 67 Times in 9 Posts
    Bây giờ chúng ta nói một ít về cách học C++ như thế nào?
    Đừng cố học C++ như những ngôn ngữ khác. Hãy học những ưu điểm mà nó mang lại. Đừng bao giờ học theo kiểu: "À, một class chỉ là một structs và thêm vào một số hàm". Đúng ra là một class là một type mà nó định nghĩa những thuộc tính và hành vi của một thứ gì đó. Điểm mạnh của C++ là hỗ trợ lập trình hướng đối tượng . Do vậy bạn hãy bắt đầu từ điểm xuất phát này.

    Trở lại với câu hỏi nên bắt đầu với C hay C++ trước ?

    Đây là một quyết định nhạy cảm. Dù thế nào đi nữa thì bạn vẫn phải học C. Một là học C như là bước đệm để học các ngôn ngữ khác hay cụ thể hơn là C++, hai là bạn có thể học C khi học các kỹ thuật C++. Theo ý tôi, bạn nên học các khái niệm cơ bản của C trước khi bắt đầu với C++. Tôi cảm thấy nếu ngay từ đầu bạn cố gắng bắt đầu với C++, một ngôn ngữ hướng đối tượng, bạn sẽ mất đi những kỹ năng cần thiết phải có đối với một nhà lập trình.

    Các trình biên dịch của Borland, và một vài cuốn sách dường như không phân biệt giữa C và C++. Thay vì vậy, họ lại phân biệt giữa ngôn ngữ cấu trúc và ngôn ngữ hướng đối tượng. Học C++ như một ngôn ngữ cấu trúc với các mở rộng C++ được kết hợp trong C sẽ giúp cho người học nắm bắt C dễ dàng khi học C++. Thường trong các buổi nói chuyện và thảo luận, tôi thường xem C như là ngôn ngữ cấu trúc và C++ là ngôn ngữ hướng đối tượng.

    Khi viết một quyển sách về lập trình, các tác giả phải có một chọn lựa rõ ràng giữa C và C++. Họ không thể trình bày cả hai một cách tường tận trong khuôn khổ của một quyển sách mà không làm cho người đọc nhàm chán vì sự không rõ ràng giữa hai ngôn ngữ. Thông thường, một cuốn sách dạy C++ (OOP) sẽ không thể đào sâu những kỹ năng lập trình thuần tuý tạo nên sự mạnh mẽ trong lập trình C. Những cuốn sách C++ cho người mới bắt đầu thường đề cập tới những vấn đề một cách rời rạc và sơ sài. Tạo cho người đọc một sự hiểu biết thiếu tính toàn diện.

    Khi khởi đầu với các cuốn sách về C, bạn sẽ tiếp cận vấn đề một cách khá chi tiết và có được những bước tiến dễ dàng trên một nền tảng kiến thức cơ bản. Tuy nhiên, những cuốn sách này lại đề cập quá nhiều những vấn đề định dạng xuất nhập. Những vấn đề này thực sự hữu dụng trong C và giúp cho người đọc hài lòng với một công việc khó khăn, nhưng đó chỉ là một phần rất nhỏ đối với một ngôn ngữ. Với C++, bạn sử dụng một phương thức xuất nhập hoàn toàn khác. Các kỹ năng về định dạng xuất nhập trong C không phải là quá lãng phí, nhưng nó không phải là cực kỳ hữu dụng. Nắm bắt tốt những kỹ thuật định dạng trong C sẽ rất thuận lợi khi lắp ghép hay duy trì những đoạn code cũ.

    Tôi nghĩ, nếu muốn trở thành một nhà lập trình viên chuyên nghiệp, và hiểu được cách viết những đoạn code một cách hiệu quả bạn nên bắt đầu với C. Nếu bạn có sở thích, và đang tìm một con đường học lập trình nhanh chóng, và sẽ quay trở lại những vấn đề cần thiết, bạn có thể bắt đầu với C++.

  4. #14
    Tham gia
    26-05-2003
    Bài viết
    42
    Like
    0
    Thanked 0 Times in 0 Posts
    Quote Được gửi bởi trannam136
    Về ngữ nghĩa, giữa hai ngôn ngữ này có sự khác biệt rất lớn. Ngữ nghĩa của một ngôn ngữ bảo cho bạn biết ngôn ngữ được sử dụng như thế nào, bạn phải mô tả những gì cho ý tưởng của bạn bằng ngôn ngữ. Về phương diện này, có một bước nhảy khá xa giữa C++ và C. Có thể minh họa sự khác biệt về vấn đề cú pháp và ngữ nghĩa của C++ và C như sau:

    Giả sử bạn là một nhà khoa học người Anh vào năm 1600. Bạn nhận được hai quyển sách khoa học. Một quyển được viết tại Việt Nam vào năm 1600. Một quyển khác được viết tại Anh vào năm 1997 và được gửi ngược về quá khứ cho bạn. Đối với quyển thứ nhất, bạn sẽ thấy những ký tự thật buồn cười và phải tốn một thời gian dài bạn mới hiểu được cú pháp của nó. Nhưng một khi bạn đã học được tiếng Việt Nam thì những ký tự này không còn làm bạn ngạc nhiên nữa. Còn quyển sách thứ hai rất giống những ký tự bằng tiếng Anh mà bạn biết nhưng nó lại mang một ý nghĩa lạ lùng.

    .

    trong ví dụ trên thì cuốn nào là C , cuốn nào là C++ vậy bạn ? tôi chưa biết gì về lập trình mong bạn chỉ giáo thêm thanks

  5. #15
    Tham gia
    05-09-2002
    Location
    Turino
    Bài viết
    757
    Like
    0
    Thanked 67 Times in 9 Posts
    Đây chỉ là ví dụ được dẫn bởi tác giả. Khi bạn bắt đầu học lập trình với Ansi C và sau đó chuyển sang C++ bạn sẽ thấy được sự khác nhau và giống nhau của chúng như thế nào.
    have fun

  6. #16
    Tham gia
    25-09-2003
    Location
    HCM
    Bài viết
    38
    Like
    0
    Thanked 0 Times in 0 Posts
    Cám ơn Trần Nam rất nhiều!

    Không có Trần Nam giới thiệu thì bạn đọc sẽ còn lâu lắm mới được biết những bài viết này ( nó nằm ở ở đẩu đâu đâu ấy) !



    Còn có nhiều bài hay hơn, hấp dẫn hơn, Trần Nam hãy vạch kế họach giới thiệu nhé.

    Thanks

  7. #17
    Tham gia
    05-09-2002
    Location
    Turino
    Bài viết
    757
    Like
    0
    Thanked 67 Times in 9 Posts
    Cảm ơn bạn nhiều, rất vui vì sự đóng góp của bạn cho những người theo học ỊT
    Have fụn

  8. #18
    Tham gia
    26-08-2002
    Location
    HCM
    Bài viết
    1,024
    Like
    2
    Thanked 30 Times in 19 Posts
    Bài viết trên trích trong tạp chí "Học Lập Trình", rất hay và bổ ích, các bạn nên tìm đọc .
    Rất cám ơn bác trannam136 đã Post bày này lên.

    - Chú ý : Bác trannam136 đã được phép của Học Lập trình để Post bày này lên DDTH.
    haivl đã trở lại thành 3giai.com, nhiều ảnh chế - clip hài cực chất

  9. #19
    Tham gia
    16-01-2003
    Location
    HCM
    Bài viết
    129
    Like
    0
    Thanked 0 Times in 0 Posts
    còn mình thì mới vào đại học, nghe ông trưởng khoa bảo là lớp tôi sẻ được học lập trình C++, va không có học lập trình C, nhưng nghe bạn nói thì tôi củng muốn học C, nhưng mình có thế tự học C không vậy, nhất là hiện giờ tôi chưa biết gì về lập trình, và tôi biết là học lập trình thì phải giỏi toán ở đại học, nhưng hiện giờ tôi vãn chưa được học toán, vậy có giải pháp nào cho tôi không, xin các bác giúp với, vì tôi muốn mình không lãng phí thời gian và tiền bạc.
    thanks all

  10. #20
    Tham gia
    05-09-2002
    Location
    Turino
    Bài viết
    757
    Like
    0
    Thanked 67 Times in 9 Posts
    Đây là một bài báo trong tờ " Học lập trình" số 02. Hiện nay đã có số 06, các bạn tìm mua để đọc nhá.

Trang 2 / 34 FirstFirst 123457 ... LastLast

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •