Lập trình hướng đối tượng(OOP) là gì?

Thảo luận trong 'Lập trình PHP' bắt đầu bởi sontv, 28/9/16.

Đã xem: 1,730

  1. sontv Thành Viên

    Người ta hay nói lập trình hướng đối tượng (OOP), vậy nó là cái gì, và trước khi nó ra đời thì mọi người lập trình “hướng” đi đâu?

    Nói chung làm gì cũng cần có hướng, đi cà phê mắc quá thì gọi bạn phục vụ lại hỏi: “anh ơi cho em hỏi đi wc hướng nào”

    Trước khi OOP ra đời thì người ta không hướng đối tượng mà hướng về function, hay còn gọi là lập trình hướng thủ tục.

    Khi được giao 1 vấn đề thì đầu tiên ta sẽ dùng “tuyệt chiêu” chia để trị, tức là chia vấn đề lớn ra thành nhiều vấn đề nhỏ, chừng nào hết chia dc thì thôi, mỗi vấn đề nhỏ đó người ra sẽ viết 1 function để giải quyết nó. Tập hợp toàn bộ các function đó sẽ thành giải pháp cho vấn đề lớn. Qui tắc ở đây là: 1 function chỉ giải quyết 1 vấn đề.

    Thôi lấy cái ví dụ cho nó dễ, chúng ta sẽ giả lập máy tính casio bỏ túi thời xưa lơ xưa lắc.


    Áp dụng chia để trị thì máy tính casio có thể làm dc cộng trừ nhân chia. Như vậy ta viết 4 function cho từng phép tính.

    function cong(a, b) {
    // cong 2 so
    }
    function tru(a, b) {
    // tru 2 so
    }
    function nhan(a, b) {
    // nhan 2 so
    }
    function chia(a, b) {
    // chia 2 so
    }


    Để chạy thì ta chỉ việc gọi cong(1,2) thì kết quả sẽ là 3. Rất đơn giản.

    Nhưng nếu thực hiệp phép tính:

    (1+1+2)*5/3

    thì bắt đầu hơi rối rối:

    chia(nhan(cong(cong(1,1),2), 5), 3)

    Ngu người chưa o_O

    [​IMG]

    Sau này có OOP thì người ta thay đổi cách tư duy, coi cái máy casio là 1 đối tượng. Và lập trình hướng về đối tượng này.

    Đối tượng casio làm dc gì? -> function
    Đối tượng casio nhét gì trong túi? -> attribute

    Những gì casio làm dc, người ta sẽ viết function cho nó.
    Những gì casio có được, người ta sẽ gọi nó là property, attribute hay các bạn thích gọi gì thì gọi =))

    Chương trình lúc đó sẽ thành thế này:

    class Casio {
    private $result = 0; // day la attribute

    public function cong($a) {
    $this->result+=$a;
    }

    public function tru($a) {
    $this->result-=$a;
    }

    public function nhan($a) {
    $this->result*=$a;
    }

    public function chia($a) {
    if (is_numeric($a) && $a > 0) {
    $this->result = $this->result / $a;
    }
    }

    public function in() {
    echo $this->result;
    }
    }


    Đại loại vậy, lâu ko code php rồi.

    Áp dụng đối tượng casio này cho bài toán(1+1+2)*5/3

    // tao doi tuong
    $casio = new Casio();
    // goi function
    // (1+1+2)*5/3
    $casio->cong(1);
    $casio->cong(1);
    $casio->cong(2);
    $casio->nhan(5);
    $casio->chia(3);
    // in ra ket qua
    $casio->in();


    Đỡ nhức đầu hơn vì chúng ta có thể gọi cong tru nhan chia theo thứ tự.

    Túm cái váy lại, OOP là khỉ gì:
    OOP là 1 kỹ thuật lập trình trong đó người lập trình sẽ tiến vào 1 trạng thái rất tâm thần, anh này nhìn đâu cũng thấy toàn là đối tượng, và tìm cách giải quyết vấn đề bằng cách cho các đối tượng này tác động lẫn nhau.

    Có bạn hỏi: MVC là khỉ gì.
    Thay vì viết 1 bài blog vớ vẩn để giải thích, thì các bạn có thể tham khảo trả lời lược giản của tôi dưới đây:
    Khi anh lập trình viên tâm thần bên trên kia (cái anh mà nhìn đâu cũng thấy đối tượng đó) đi lập trình web, thì anh ta sẽ nhìn thấy 3 đối tượng: Model, View, Controller. Anh ta sẽ code web bằng cách cho 3 đối tượng này tác động lẫn nhau. Cách này khá hay nên anh ta đặt tên cho nó là MVC và chia sẻ với mọi người.

    Thế thì 3 thằng đó tác động lẫn nhau như thế nào ?

    Tạm gọi:
    controller là tiểu nhị.
    model là đầu bếp.
    view là cái bàn để dọn đồ ăn lên.
    Khi khách gọi món, tiểu nhị biết khách cần gì, nhưng nó ko có món ăn trên tay mà phải hỏi đầu biếp, khi dọn món ăn ra thì tiểu nhị sẽ để lên bàn, có nhiều loại bàn và nhiều cách bày biện thức ăn trên bàn tuỳ hứng.
    Hay là:
    Khi trang web dc mở, controller sẽ biết user muốn làm gì, nhưng nó ko có thông tin user cần mà phải hỏi model, khi hiển thị, controller sẽ dùng view, có nhiều view tuỳ hứng.

    Chốt lại:
    controller sẽ nói chuyện với model view.
    view model không bao giờ nói chuyện trực tiếp với nhau. (có ai thấy cái bàn nói chuyện với đầu bếp chưa ?)

    Coi model là logic và view là presentation thì mô hình MVC sẽ giúp chúng ta tách 2 chym này ra, dẫn đến code dễ đọc, dễ hiểu và dễ test hơn.
    Xin cám ơn anh lập trình viên tâm thần.
    Nguồn: Sưu tầm;)
     
    Đang tải...
    nam lim xanh

    Bình Luận Bằng Facebook

  2. bigstar Thành Viên

    Số bài viết: 17
    Đã được thích: 1
    Điểm thành tích: 3
    Web:
    Cứ code mà tẩu hỏa nhập ma rồi cũng die à. Chán code không muốn ngồi máy tính thích kiếm ít tiền rồi ra làm kinh doanh. Chứ ngồi máy tính suốt chán đời quá anh ơi
     
    sontv thích bài này.
  3. sontv Thành Viên

    Số bài viết: 13
    Đã được thích: 5
    Điểm thành tích: 3
    Hãy xem nó là 1 niềm đam mê của bạn :).còn muốn nhiều tiền thì kinh doanh :)
    "Phi thương bất phú":D:D:D
     
    bigstar thích bài này.
  4. bigstar Thành Viên

    Số bài viết: 17
    Đã được thích: 1
    Điểm thành tích: 3
    Web:
    Chẳng lẻ ta mặc phó chuyện đời cho người khác làm sao thì làm hả anh. Đời thật chán khi ta lớn
     
  5. DuongToan Thành Viên Đồng

    Số bài viết: 363
    Đã được thích: 16
    Điểm thành tích: 18
    Web:
    Kiểu đây là giai đoạn Bác ấy đang không có niềm tin vào cuộc sống ạ :)
     
    sontv thích bài này.
  6. Aio-Aio Quản Trị Viên

    Số bài viết: 152
    Đã được thích: 65
    Điểm thành tích: 28
    À, có một câu ngạn ngữ chế của "trẩu tre" nó thế này: "Đừng có tự hào mình nghèo mà học giỏi; hãy tự hỏi tại sao mình giỏi mà vẫn nghèo". Buồn cười đấy, nhưng cũng đáng suy nghĩ; nghĩ ở chỗ: nếu bạn đang nghèo thì thực sự bạn đã là người giỏi chưa? Hay mới chỉ tưởng là mình giỏi?

    Giỏi một chuyên môn nào đó, ở mức thực sự đi, bạn sẽ thấy rất hiếm người giỏi mà lại nghèo. Ngô Bảo Châu, suốt đời chỉ ăn rồi tính toán, cũng không nghèo mặc dù chẳng cần kinh doanh; lập trình viên chuyên nghiệp ở trình độ cao không ai người ta trả lương thấp cả; đảm nhiệm được dự án lớn với độ phức tạp cao người ta cũng không thể đánh giá thấp bạn. Tôi đã từng biết đến những thằng chỉ biết ăn rồi chơi game thu nhập cả triệu đô, bởi nó là game thủ chuyên nghiệp và giỏi.

    Nhìn nhận không chính xác về năng lực, ưu nhược điểm của bản thân mà khắc phục và cố gắng để trở nên giỏi hơn và mạnh mẽ hơn; nhìn nhận về cuộc sống một cách thiếu lạc quan theo hướng phóng đại sự thiếu công bằng hay thiếu lòng tin vào xã hội; đó là những thái độ cực đoan nên tránh. Hãy cố gắng hết khả năng để giỏi lấy một thứ, dù đó là bất cứ thứ gì, kể cả là việc quét rác:

    http://vnexpress.net/photo/cuoc-song-do-day/nguoi-quet-don-san-bay-sach-nhat-the-gioi-3430849.html

    http://vnexpress.net/tin-tuc/the-gi...ro-thanh-ngoi-sao-mang-xa-hoi-my-3451486.html

    Và đây là điều cuối mình muốn nói: Bạn tưởng việc kinh doanh là dễ dàng và kiếm nhiều tiền hơn việc lập trình thì bạn có sự nhầm lẫn lớn. Kinh doanh là việc rất phức tạp và rất nhiều áp lực, cho nên nó chẳng dễ hơn lập trình. Kinh doanh là việc nhiều rủi ro, cho nên không ít người kinh doanh thua lỗ và nợ nần, nên chưa chắc đó đã là việc kiếm ra nhiều tiền hơn lập trình.

    Ảo tưởng kinh doanh kiếm ra nhiều tiền nó xuất hiện vì hai nguyên nhân đơn giản: Tổng số người tham gia kinh doanh lớn hơn tổng số người lập trình cho nên số người kinh doanh giỏi lớn hơn số người lập trình giỏi; và truyền thông xã hội thường có thói quen nói về những người kinh doanh thành công hơn những người kinh doanh thất bại, mà mình tin số thất bại còn đông hơn số người thành công vì thị trường luôn có hình kim tự tháp, không có những người thất bại ở đáy kim tự tháp thì làm gì có sự tích tụ tài sản cho nhóm người thành công ở đỉnh kim tự tháp.

    Riêng trong lĩnh vực công nghệ thông tin, mình cũng đã làm việc với nhiều người có chuyên môn lập trình nhưng lại đi làm kinh doanh rồi; kết quả thế nào và tỷ lệ thành công bao nhiêu thì bạn có thể tự tìm hiểu.
     
    cuongnt and chuvanduyhn91 like this.
  7. vanhoan Thành Viên Mới

    Số bài viết: 4
    Đã được thích: 0
    Điểm thành tích: 1
    ngồi buồn đọc xong thấy buồn hơn
    :'(
     
  8. maychieuvnpc Thành Viên Kì Cựu

    Số bài viết: 210
    Đã được thích: 15
    Điểm thành tích: 18
    Web:
    Đã là sinh viên IT thì ai chả phải học mấy cái này nhưng mà ra trường nó chả xài được. Muốn làm được thì công ty nó phải đào tạo lại từ đầu bởi cách dạy trong trường không trực quan, người học khó có thể hình dung công việc thực tế. Không chỉ ở mảng viết phần mềm mà cả ở mảng code web cũng vậy thôi.
     
  9. cuongnt Thành Viên

    Số bài viết: 16
    Đã được thích: 2
    Điểm thành tích: 3
    Thực ra nghe OOP bản chất tiếng anh nó đã định nghĩa chính nó : Object Oriented Programming - tạm dịch là lập trình hướng đối tượng.
    Trong lập trình ngoài lập trình hướng đối tượng còn có lập trình hướng thủ tục, hướng dữ liệu, hướng sự kiện, hướng dịch vụ, hướng cấu phần...
    Tuy nhiên OOP được các nhà phát triển và các lập trình viên hay dùng nhất vì nó coi các thành phần tham gia lập trình là các đối tượng có thể dễ dàng sử dụng lại ( thông qua thừa kế..) có thể lấy được toàn bộ các thuộc tính ví dụ đối tượng sinh viên
    thì sinhvien.ten, sinhvien.inThongTin()...