Giải thích 4 tính chất trong lập trình hướng đối tượng

Поделиться
HTML-код
  • Опубликовано: 9 ноя 2024

Комментарии • 65

  • @boyhairyellow
    @boyhairyellow 7 месяцев назад

    mọi khi học các tính chất OOP không biết ứng dụng vào việc gì nhưng sau khi xem video của anh em đã hình dung được, cảm ơn anh nhiều ạ!

  • @quocdatngo8035
    @quocdatngo8035 Год назад +11

    thật sự ngưỡng mộ tinh thần hiếu học, sự chia sẻ và cầu tiến của chú khi thấy đồng hồ máy tính chỉ 5h sáng và khi chú nói rằng chữ mình xấu và muốn cải thiện luyện chữ đẹp hơn. Ở lứa bọn cháu, dù còn rất nhiều thiếu sót về cả kiến thức lẫn đời sống, nhưng vẫn hay tự cảm thấy hài lòng và quá thiếu sự kỷ luật, khắt khe hơn với bản thân mình. Mong chú có thể chia sẻ thêm về kiến thức chuyên môn và giúp đỡ cộng đồng lập trình ở Việt Nam. Chúc chú và gia đình nhiều niềm vui và sức khỏe ạ!

    • @hoc-lap-trinh
      @hoc-lap-trinh  Год назад

      Chắc là đồng hồ sai hay sao í chứ lúc đó đang buổi chiều mà :D. Nhưng dù sao cũng cảm ơn em.

  • @vdh8888
    @vdh8888 6 месяцев назад

    -Cảm ơn chú đã làm ra video bổ ích này, nếu ai đã học qua Java OOP thì 'Virtual' bên C++ nó là kỹ thuật Dynamic Binding mặc định bên Java khi kế thừa và thực hiện tính chất đa hình

  • @andrew_nguyen05
    @andrew_nguyen05 5 месяцев назад +1

    Hay quá anh ạ, rất thích cách anh giảng dạy như này! E rất thích xem những video có kiến thức sâu như này !

  • @Henry_12095
    @Henry_12095 3 месяца назад

    con cảm ơn chú vì bài giảng ạ. Con sẽ cố gắng học và tìm hiểu để kiến thức sâu giống chú

  • @dinhhoan5166
    @dinhhoan5166 8 месяцев назад

    thật sự cảm ơn anh rất nhiều rất chi tiết và dễ hiểu !

  • @thangnguyenhuu5076
    @thangnguyenhuu5076 5 месяцев назад

    Cảm ơn anh, sau khi nghe xong thì em hiểu class Dog kế thừa class Animal, vậy từ góc nhìn của Dog thì ta có thể tái sử dụng lại code của Animal, từ góc nhìn của Animal thì ta có thể mở rộng code của chính nó (bằng đa hình), điều này dẫn đến tình chất cuối là tính trừu tượng, Animal không biết cụ thể loài vật nào kế thừa nó, chỉ cần cam kết có phương thức move() là được.

  • @khanhle7954
    @khanhle7954 Год назад

    Kiến thức a sâu thật đấy. E rất thích xem những video như thế này

    • @hoc-lap-trinh
      @hoc-lap-trinh  Год назад

      Cảm ơn em, vậy nhớ theo dõi thêm nhé

  • @truonghuynhminh8268
    @truonghuynhminh8268 5 месяцев назад

    Cháu chào chú ạ, cháu chỉ muốn nói là chú dạy cuốn quá ạ! Vừa được học vừa được chill! Chúc chú nhiều sức khỏe ạ!

  • @yecat1295
    @yecat1295 Год назад

    cảm ơn chú đã chia sẻ, hay quá ạ

  • @vietleucanh4111
    @vietleucanh4111 Год назад +1

    Mong bác ra nhiều video hơn nhé, cũng từ fb qua bên này :v

  • @nsocan
    @nsocan 6 месяцев назад

    video hay quá ạ, nếu có thời gian mong anh ra thêm kiến thức về design pattern

    • @hoc-lap-trinh
      @hoc-lap-trinh  6 месяцев назад

      Ok em, hi vọng trong tương lai sẽ có

  • @DiepNguyen-yy6sr
    @DiepNguyen-yy6sr Год назад

    bài viết từ 2020 mà 2023 mới ra vid :(. Đùa thôi cảm ơn anh :D

  • @vynguyenchi9612
    @vynguyenchi9612 Год назад

    cảm ơn chú nhiều

  • @NhanThanh-kp7hc
    @NhanThanh-kp7hc Год назад +1

    Mong chú làm thêm kiến thức về SQL, con học trên trường rồi vẫn có nhiều cái không hiểu, cám ơn chú

    • @hoc-lap-trinh
      @hoc-lap-trinh  Год назад

      SQL thì chắc lâu, mình chưa đưa nó vào plan làm video :)

  • @sinzcandt
    @sinzcandt Год назад

    Qúa tuyệt chú ạ

  • @minhjb6854
    @minhjb6854 Год назад

    Dễ hiểu quá ạ. Cảm ơn a

    • @hoc-lap-trinh
      @hoc-lap-trinh  Год назад +1

      Nhớ theo dõi thêm những video dễ hiểu khác nữa nhé.

  • @ducphd
    @ducphd Год назад

    Hay quá chú Nam ơi 🎉🎉. Cháu xem trên điện thoại thấy chữ hơi nhỏ ạ

    • @hoc-lap-trinh
      @hoc-lap-trinh  Год назад

      Cảm ơn em. Vụ chữ nhỏ thì hơi khó, để hôm sau cố gắng zoom to hơn, nhưng nghe thôi chắc cũng hiểu.

  • @hoangnguyenle1887
    @hoangnguyenle1887 5 месяцев назад

    Rất cám ơn anh Nam về bài học bổ ích này. Em đang có một câu hỏi là theo anh trong 4 tính chất thì tính chất nào là quan trọng nhất và tại sao ah. Cám ơn anh và chúc anh sức khỏe ah

    • @hoc-lap-trinh
      @hoc-lap-trinh  5 месяцев назад

      Cảm ơn em, nhưng e phải trả lời trước là tại sao phải so sánh vậy? 😌

    • @hoangnguyenle1887
      @hoangnguyenle1887 5 месяцев назад

      @@hoc-lap-trinh dạ em chỉ đơn giản nghĩ đến những câu hỏi liên quan đến một vấn đề thôi anh ah. Và em xem nhiều video về Oop thì cũng ko thấy nói gì về việc tính chất nào là quan trọng nhất cả. Nhưng khi em search chatgpt thì lại thấy nói tính chất đóng gói là quan trọng nhất nên muốn hỏi thêm ý kiến của anh xem thế nào ah. Em cám ơn anh

  • @ducpham35
    @ducpham35 Год назад

    Anh có thể làm 1 video nói về golang được không ạ. có thể áp dụng oop cho golang được không cũng như là các design pattern, clean architecture. Chúc anh và gia đình nhiều sức khoẻ

  • @angquangtrung6277
    @angquangtrung6277 Год назад

    Hay quá cuối cùng cũng có kiến thức mà em có thể liên hệ trực tiếp với việc học của em rồi :))

  • @sinzcandt
    @sinzcandt Год назад

    Cam on anh rat nhieu.

  • @kienle150
    @kienle150 Год назад

    cháu mong chú sẽ nói về SOLID nữa ạ

  • @nguyenvung2510
    @nguyenvung2510 4 месяца назад

    Em chào anh Nam, e có 1 thắc mắc về OOP muốn được anh giúp đỡ
    Em có một interface InterfaceA và nhiều lớp A1, A2,... A10 implement từ nó. Mỗi lớp này có các thuộc tính và phương thức riêng.
    InterfaceA:
    String Name{set;get;}
    Void Insert(string para)
    ClassA1:InterfaceA
    String ParaA1{set;get;}..
    Void Insert(paraA1). ….Method Insert()lại nhận chính các thuộc tính tương ứng làm tham số đầu vào . Tương tự Các classA2..A10 chứa các paraA2…A10 tương ứng
    E đã dùng Factory Pattern.
    FactoryClassA:
    InterfaceA CreateClassA(string name) => để trả ra các class tương ứng
    Tuy nhiên, mặc dù có thể truy cập các phương thức như Insert() từ interface InterfaceA,nhưng để truy cập các thuộc tính riêng của từng lớp (như ParaA1 trong ClassA1), e phải sử dụng ép kiểu hoặc cách khác như Reflection, nhưng e cảm thấy điều này làm mã nguồn trở nên phức tạp.
    Anh có thể gợi ý cho e một cách tiếp cận nào đơn giản hơn để quản lý và sử dụng các thuộc tính này mà không cần phải sử dụng các kỹ thuật phức tạp như vậy không?

    • @hoc-lap-trinh
      @hoc-lap-trinh  4 месяца назад

      Ở đây InterfaceA em đang có vấn đề về thiết kế, anh không rõ bài toán em đang giải quyết là gì nên khó có thể có lời khuyên chính xác. Nhưng để sửa lại thì có thể có vài cách:
      - Method Insert sẽ là Insert(InterfaceA obj), trong mỗi lớp thừa kế nó sẽ tự kiểm tra kiểu và ép về kiểu nó cần.
      - Sử dụng generic: interface A{
      void Insert(T t) ;
      }
      - Tách ra làm hai interface: interfaceA và interfaceACollection (tạm đặt tên như vậy), void insert sẽ thuộc interfaceACollection, anh nghĩ đây là phương án hợp lý nhất vì nó tách biệt chức năng của interfaceA ra (trong thiết kế của em thì interfaceA đang đảm nhiệm hai chức năng khác nhau).
      Tạm là vậy, nếu có bài toán cụ thể thì sẽ dễ tìm phương án tốt hơn.

  • @nguyenminhhoang1906
    @nguyenminhhoang1906 Год назад

    Anh nên chỉnh âm to lên xíu ạ, cảm ơn anh đã chia sẻ kiến thức!

    • @hoc-lap-trinh
      @hoc-lap-trinh  Год назад

      OK em, anh sẽ cố gắng cải tiến dần dần

  • @vuongphan97
    @vuongphan97 11 месяцев назад

    Bài học rất thực tế và dễ hiểu, cảm ơn chú ạ.
    Chú có biết nguồn nào mà cung cấp các bài toán, bài tập để thực hành OOP không chú, nếu có chú có thể chia sẻ được không ạ.

    • @hoc-lap-trinh
      @hoc-lap-trinh  11 месяцев назад +4

      Đừng làm nhiều bài nhỏ, thay vì vậy nghĩ ra 1 bài dài làm trong một vài tuần, mình sẽ học được nhiều thứ hơn. Chạy 1 lần 10km sẽ khác nhiều so với chạy 10 lần mỗi lần 1km.

  • @anleuc3246
    @anleuc3246 Месяц назад

    Anh Nam ơi, cho em hỏi là các khái niệm Generalisation và Specialisation tương ứng với các tính chất nào trong OOP vậy ạ? Em đọc thấy có nơi bảo Generalisation tương ứng với Interface, specialisation tương ứng với Inheritance. Nhưng cũng có nơi bảo Generalisation tương ứng Inheritance, còn specialisation tương ứng polymorphism. Nên em đang không biết cái nào chính xác ạ. Em cảm ơn anh

    • @hoc-lap-trinh
      @hoc-lap-trinh  Месяц назад +1

      Thực ra nó không tương ứng với các khái niệm trong OOP, generalisation và specialisation, gọi là tổng quát hóa hoặc chi tiết hóa, được coi là các quá trình hơn là các tính chất, thường người ta dùng hai từ này trong quá trình thiết kế, để chỉ đến các bước làm việc. Ví dụ sau khi generalization thì kết quả em có có thể là một cây class chẳng hạn, hoặc một lược đồ ER được tối ưu...
      Nói chung em đừng cố tìm cách map 2 khái niệm đó với 4 tính chất trong OOP, nó không hoàn toàn tương đương nên sẽ gây khó hiểu.

  • @DevFStack
    @DevFStack Год назад

    làm về entityframework đi anh

  • @thangnguyenquoc1129
    @thangnguyenquoc1129 6 месяцев назад

    theo cách hiểu của em thì:
    protected là private đối với bên ngoài class, nhưng là public đối với bên trong class =))

    • @hoc-lap-trinh
      @hoc-lap-trinh  6 месяцев назад

      đơn giản là chỉ có các phương thức của chính nó và lớp con mới truy cập được

  • @HuyTruong-hu9sn
    @HuyTruong-hu9sn Год назад

    56:20 🤣🤣

  • @hoavo3897
    @hoavo3897 11 месяцев назад

    Không biết chú có lớp dạy lập trình không ạ?

    • @hoc-lap-trinh
      @hoc-lap-trinh  11 месяцев назад +1

      Hiện không có bạn ạ

  • @VuvaToniKroos
    @VuvaToniKroos Год назад

    anh nói về microservices đi anh 😁

    • @hoc-lap-trinh
      @hoc-lap-trinh  Год назад +2

      Cái đó khó quá, từ từ để anh học đã 😁

    • @VuvaToniKroos
      @VuvaToniKroos Год назад

      ​@@hoc-lap-trinh anh nam 10/10

  • @longvungoc260
    @longvungoc260 5 месяцев назад

    Em có một câu hỏi ạ, vậy là sau này mình muốn đọc dữ liệu từ XML, Word hoặc 1 loại hình dữ liệu khác thì mình phải viết thêm các method implement DataReader như XMLDataReader - WordDataReader phải không ạ, vậy thì khi thiết kế Windows khi có 1 loại máy in mới thì họ cũng phải viết thêm các triển khai cho loại máy in đó phải không ạ

    • @hoc-lap-trinh
      @hoc-lap-trinh  5 месяцев назад +2

      Đúng rồi em, khi em có một loại máy in mới thì em phải cài driver cho nó, lý do thường hiện nay chúng ta không phải cài là vì các thế hệ Windows mới có khả năng nhận dạng thiết bị rất tốt, vậy nên nó sẽ tự tìm và cài đặt driver phù hợp, người dùng không cần làm gì khác. Thêm nữa là các chuẩn thiết bị hiện tại đã rất ổn định, không có tình trạng mỗi thứ làm một kiểu khác nhau, nên một loại driver cũng có thể dùng cho nhiều loại thiết bị khác nhau.

    • @longvungoc260
      @longvungoc260 5 месяцев назад

      @@hoc-lap-trinh 😍vâng anh, em hiểu rồi ạ

  • @cnmeomeomeo
    @cnmeomeomeo 3 месяца назад

    Cảm ơn chú ạ, chia sẻ nhiều kiến thức bổ ích quá ạ