Inflearn brand logo image
Inflearn brand logo image
Inflearn brand logo image
BEST
Programming

/

etc. (Programming)

Đối tượng - Phần nguyên tắc thiết kế

Học các nguyên tắc thiết kế đa dạng cần biết để viết mã hướng đối tượng, lấy mã hoạt động làm trung tâm.

(5.0) 24 đánh giá

591 học viên

  • eternity
oop
Software Test
software-design

Đánh giá từ những học viên đầu tiên

Dịch cái này sang tiếng Việt

  • Nguyên tắc thiết kế hướng đối tượng

  • Nhận biết vấn đề code qua nguyên tắc thiết kế

  • Cách tiến hóa mã bằng tái cấu trúc

  • Mối quan hệ giữa kiểm thử và chất lượng code

Nguyên tắc thiết kế hướng đối tượng ,
Hiểu cách áp dụng 🤔

Khi viết Object , có nhiều chủ đề mà tôi không thể đưa vào hoặc giải thích đầy đủ do hạn chế về mặt không gian, và điều đáng tiếc nhất là tôi không thể sắp xếp nội dung liên quan đến các nguyên tắc thiết kế một cách có hệ thống. Mặc dù một số nguyên tắc thiết kế đã được đề cập ngắn gọn hoặc bối cảnh và tính cần thiết của các nguyên tắc đã được giải thích dưới dạng gắn kết, kết hợp và đóng gói, nhưng không có hướng dẫn cụ thể nào về cách kết nối các nguyên tắc khác nhau trong bối cảnh thiết kế và cách áp dụng các nguyên tắc này.

Để bổ sung cho điều này, phần Nguyên tắc thiết kế đối tượng tập trung hoàn toàn vào các nguyên tắc thiết kế, giải thích những cách thực tế để áp dụng các nguyên tắc thiết kế khi đánh giá và cải thiện mã ở cấp độ mã cụ thể. Thông qua khóa học này, bạn sẽ học cách xác định và cải thiện các vấn đề trong mã của mình dựa trên các nguyên tắc thiết kế. Do đó, sau khi tham gia khóa học, bạn sẽ hiểu cách kết hợp nhiều nguyên tắc thiết kế khác nhau để thiết kế mã có thể bảo trì được.

Các nguyên tắc thiết kế được trình bày trong bài giảng là:

  • Nguyên lý trừu tượng đơn cấp ( SLAP )

  • Nguyên tắc trách nhiệm đơn lẻ ( SRP )

  • Nguyên lý đóng mở ( OCP )

  • Nguyên lý thay thế Liskov ( LSP )

  • Nguyên lý đảo ngược phụ thuộc ( DIP )

  • Nguyên lý phân tách giao diện ( ISP )

  • Luật Demeter ( LoD )

  • Hãy nói, đừng hỏi ( TDA )

  • Phân tách truy vấn lệnh ( CQS )

  • Đừng lặp lại chính mình ( DRY )


Tìm hiểu về những điều này

Khái niệm và sự cần thiết của nguyên tắc thiết kế

Mọi nguyên tắc thiết kế đều có chung mục tiêu là cải thiện chất lượng thiết kế. Tuy nhiên, mục tiêu chi tiết của từng nguyên tắc thiết kế lại khác nhau. Do đó, điểm khởi đầu để hiểu các nguyên tắc thiết kế là hiểu mục tiêu mà mỗi nguyên tắc thiết kế đang cố gắng cải thiện và xác định xem việc cải thiện mã hiện tại của bạn để đáp ứng mục tiêu đó có phù hợp hay không.

Bằng cách tham gia các bài giảng, bạn sẽ tự nhiên hiểu được lý do tại sao mỗi nguyên tắc thiết kế lại cần thiết và khi nào thì chúng hữu ích.

Hướng dẫn cụ thể để áp dụng các nguyên tắc thiết kế

Chỉ hiểu định nghĩa về nguyên tắc thiết kế thôi là chưa đủ. Phần quan trọng nhất của nguyên tắc thiết kế là hiểu khi nào và áp dụng nguyên tắc thiết kế nào, cũng như áp dụng chúng theo cách phù hợp.

Khóa học cung cấp hướng dẫn thực tế khi áp dụng từng nguyên tắc thiết kế. Bạn có thể sử dụng hướng dẫn này như một tài liệu tham khảo và la bàn để đánh giá và cải thiện mã của mình.

Nguyên tắc thiết kế và kiểm thử đơn vị

Việc ghi nhớ các bài kiểm tra sẽ giúp thiết kế trở nên gắn kết hơn, ít bị ràng buộc hơn và bao quát được những thay đổi. Và khi bạn triển khai mã của mình theo các nguyên tắc thiết kế, việc viết và chạy thử nghiệm sẽ trở nên dễ dàng hơn.

Bài giảng được thiết kế để giúp bạn hiểu mối quan hệ giữa các nguyên tắc thử nghiệm và thiết kế bằng cách giải thích cách mỗi nguyên tắc thiết kế có tác động tích cực đến thử nghiệm.

Nguyên tắc thiết kế và tái cấu trúc

Việc tái cấu trúc liên tục là điều cần thiết để đạt được thiết kế đủ đơn giản nhưng vẫn có thể bảo trì được. Nguyên tắc thiết kế cung cấp hướng dẫn về nơi cần tái cấu trúc mã và mục đích tái cấu trúc.

Bài giảng được thiết kế sao cho bạn có thể hiểu một cách tự nhiên các nguyên tắc thiết kế bằng cách trải qua quá trình tái cấu trúc mã ví dụ theo góc nhìn của các nguyên tắc thiết kế.

4 mã ví dụ cụ thể

Khóa học sẽ tái cấu trúc bốn ví dụ bằng cách sử dụng các nguyên tắc thiết kế: trò chơi phiêu lưu văn bản, ứng dụng quản lý doanh thu trò chơi, ứng dụng quản lý lịch trình định kỳ và hệ thống quản lý tiền tệ.

Sau khi hoàn thành khóa học, bạn sẽ hiểu được trực quan mối quan hệ giữa các nguyên tắc thiết kế, tái cấu trúc và thử nghiệm bằng cách học cách áp dụng nhiều nguyên tắc thiết kế khác nhau vào nhiều tình huống khác nhau.

Làm thế nào để áp dụng các nguyên tắc thiết kế một cách toàn diện

Các nguyên tắc thiết kế không được sử dụng một cách riêng lẻ. Khi viết mã, người ta thường áp dụng nhiều nguyên tắc thiết kế khác nhau theo cách toàn diện. Và để tuân theo một nguyên tắc thiết kế, các nguyên tắc thiết kế khác cũng phải được xem xét. Việc xem xét các nguyên tắc thiết kế theo cách phức tạp sẽ cải thiện đáng kể khả năng đưa ra lựa chọn thiết kế trong nhiều tình huống khác nhau.

Trong khóa học này, bạn sẽ học cách sử dụng kết hợp nhiều nguyên tắc thiết kế khác nhau, đồng thời chỉ ra cách cải thiện mã thông qua các lần tái cấu trúc liên tiếp.

Đối tượng - Mối quan hệ với những điều cơ bản

Bạn không cần phải nghe Objects - Basics trước để nghe Objects - Design Principles. Trong khi Object Fundamentals đề cập đến cách tiếp cận từ trên xuống để tạo ra các thiết kế có thể bảo trì bằng cách sử dụng thiết kế theo trách nhiệm, thì Object Design Principles đề cập đến cách tiếp cận từ dưới lên để tái cấu trúc mã nhằm giúp mã dễ bảo trì hơn.


Vì hai khóa học này đề cập đến thiết kế hướng đối tượng từ những góc nhìn khác nhau nên chúng bổ sung cho nhau thay vì phụ thuộc lẫn nhau. Vì vậy, thứ tự bạn học các bài giảng không quan trọng và sau khi học cả hai bài giảng, bạn sẽ có được cái nhìn toàn diện về hướng đối tượng.

Nó đặc biệt ở khía cạnh này

📌 Mô tả các nguyên tắc thiết kế hướng đối tượng độc lập với ngôn ngữ.

📌 Mặc dù các ví dụ được triển khai bằng Java, nhưng các khái niệm được trình bày trong bài giảng có thể áp dụng cho bất kỳ ngôn ngữ hoặc môi trường nào.

📌 Chúng tôi cung cấp 1400 trang slide chứa đầy đủ nội dung chính.

📌 Chúng tôi đã sắp xếp nội dung sao cho dễ hiểu bằng cách diễn đạt các khái niệm bằng hình ảnh trực quan thay vì văn bản đơn giản.

📌 Vì quá trình tái cấu trúc được truyền tải bằng hình ảnh nên quá trình thay đổi mã rất dễ hiểu.

Những điều cần lưu ý trước khi tham gia lớp học

Tài liệu học tập

  • 1400 trang bài giảng có sẵn ở định dạng PDF.

  • Mã ví dụ được sử dụng trong bài giảng có thể được tìm thấy trên GitHub .
    Nếu bạn cảm thấy bất tiện khi nhận ví dụ cho mỗi bài giảng, bạn có thể học thoải mái hơn bằng cách nhận phiên bản tích hợp .

Kiến thức và ghi chú của người chơi

  • Vì mã ví dụ được viết bằng Java nên bạn cần biết ngữ pháp Java cơ bản để học dễ dàng.

  • Tôi đã viết bài giảng này chỉ sử dụng JDK cơ bản nhất, nhưng một số ví dụ sử dụng phân tích cú pháp JSON.

    Thư viện Jackson , thư viện nhúng redis để hỗ trợ Redis trong bộ nhớ

    , Redis Java Client Thư viện Jedis

    , bao gồm phần sử dụng khung Swing để phát triển các ứng dụng GUI.
    Ngay cả khi bạn không biết các thư viện này, chúng tôi vẫn xây dựng nó để bạn có thể học các nguyên tắc cốt lõi mà không gặp khó khăn.


  • Chúng tôi sử dụng JunitAssertJ làm thư viện kiểm thử đơn vị.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Những người muốn tìm hiểu về khái niệm và cách áp dụng nguyên tắc thiết kế hướng đối tượng

  • Người khó áp dụng OOP vào code

  • Những người cần các nguyên tắc và hướng dẫn cơ bản để thiết kế code tốt

Cần biết trước khi bắt đầu?

  • Cú pháp cơ bản Java

  • Kinh nghiệm lập trình bằng ngôn ngữ hướng đối tượng

Xin chào
Đây là

2,102

Học viên

108

Đánh giá

72

Trả lời

5.0

Xếp hạng

2

Các khóa học

객체지향 설계와 도메인-주도 설계에 관심이 많으며 행복한 팀과 깔끔한 코드, 존중과 협력이 훌륭한 소프트웨어를 낳는다는 믿음을 가지고 있는 평범한 개발자입니다. 개발자, 교육자, 관리자를 오가며 익힌 다양한 경험을 바탕으로 좋은 코드와 함께 좋은 프로덕트를 만들기 위해 노력하고 있습니다.

저서로는 『객체지향의 사실과 오해』와 『오브젝트』가 있고 번역서로는 『엘레강트 오브젝트』가 있으며 『만들면서 배우는 클린 아키텍처』에 감수자로 참여했습니다.

💡개인블로그 : https://eternity-object.tistory.com/

 

Chương trình giảng dạy

Tất cả

33 bài giảng ∙ (6giờ 16phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Tất cả

24 đánh giá

5.0

24 đánh giá

  • haedallog님의 프로필 이미지
    haedallog

    Đánh giá 14

    Đánh giá trung bình 4.9

    5

    100% đã tham gia

    Thật vinh dự khi được để lại đánh giá đầu tiên. Tôi đã hoàn thành cả khóa học <오브젝트 - 기초편> và ngay sau đó là <오브젝트 - 설계원칙> rồi mới viết đánh giá này. Ưu điểm của khóa học là như sau: 1. Không chỉ liệt kê nguyên tắc mà còn có ví dụ code thực tế, giúp hiểu một cách trực quan. ㄴ Tôi cứ nghĩ mình đã hiểu nguyên tắc SOLID vì thường xuyên tiếp xúc, nhưng xem bài giảng mới biết đó là sự nhầm lẫn của tôi. 2. Tiện ích đã tăng lên so với <오브젝트 - 기초편>. ㄴ Tài liệu học tập cung cấp link repo liên quan, tiện lợi để truy cập. ㄴ Hình ảnh người chia sẻ kiến thức không còn hiển thị, giúp việc xem slide thuyết trình dễ dàng hơn nhiều. Cũng có một vài điểm hơi tiếc. (Nhỏ thôi.) 1. Mức âm lượng khác nhau giữa các video, hơi gây khó chịu. 2. Đôi khi video có lỗi. 3. Nếu các cách diễn đạt khẩu ngữ như '되게 됩니다.' được chỉnh sửa sẽ gọn gàng hơn. 4. Có trường hợp cách viết từ mượn khác nhau (e.g. 메서드/메소드), nếu phần này được thống nhất sẽ gọn gàng hơn. Tôi cũng rất khuyến khích xem <오브젝트 - 기초편>. Bạn sẽ hiểu bài giảng một cách rộng hơn. Nếu bạn không biết thiết kế hướng đối tượng là gì, tôi mạnh mẽ giới thiệu khóa học này. Tôi dự định sẽ giới thiệu cho nhiều người xung quanh mình nữa 😊😊 Cảm ơn anh Jo Young-ho đã tạo ra khóa học tuyệt vời này. Tôi mong đợi code của mình sẽ thay đổi rất nhiều trong tương lai. Chúc anh làm ít hưởng nhiều nhé 😊😊😊

    • eternity
      Giảng viên

      Chào choiseonmun, tôi nhớ gần đây bạn đã để lại nhận xét về khóa học "오브젝트 - 기초편", vậy mà bạn đã hoàn thành khóa học rồi. Chúc mừng bạn đã hoàn thành khóa học và cảm ơn bạn đã để lại nhận xét. :) May quá khóa học đã giúp ích cho bạn. Ban đầu tôi định bỏ phần hình ảnh của mình theo yêu cầu của nhiều người quen, nhưng phản ứng tốt... thật may. Do vấn đề sức khỏe, thời gian quay phim kéo dài nên xảy ra vấn đề âm lượng hơi khác nhau. Nếu có ai cảm thấy khó chịu, tôi sẽ xem xét ghi âm lại cùng với "오브젝트 - 기초편" trong tương lai. :) Tôi tự mình làm hết từ sản xuất, quay phim đến chỉnh sửa khóa học, nhưng lần này tài liệu trình bày nhiều hơn tôi nghĩ. Dù tôi đã kiểm tra kỹ lưỡng ở giữa các phần, có vẻ như vẫn có những điểm tôi không nhận ra. Về phần này, tôi xin lỗi vì đã không kiểm tra kỹ lưỡng trước khi phát hành. Tôi cũng sẽ xem xét lại một lần nữa và sửa lỗi nhanh nhất có thể. :) Nếu tiện, nếu bạn báo lỗi về video hoặc sự nhất quán của các slide, tôi sẽ sửa và cập nhật nhanh nhất có thể. Câu nói "Làm ít, kiếm nhiều" thật sự thấm thía trong lòng tôi. Tôi hy vọng khóa học sẽ giúp bạn giảm chi phí bảo trì và nâng cao chất lượng mã code. Xin cảm ơn!

  • enciel02028311님의 프로필 이미지
    enciel02028311

    Đánh giá 3

    Đánh giá trung bình 5.0

    5

    30% đã tham gia

    Thú vị như xem phim vậy, câu chuyện về thiết kế cứ thế tiếp diễn~ Em sẽ tiếp tục nghe kỹ ạ~ Cảm ơn vì bài giảng rất hay bb

    • eternity
      Giảng viên

      Cảm ơn bạn Byung-mo Kim đã để lại đánh giá khóa học. Khóa học được xây dựng theo luồng áp dụng các nguyên tắc thiết kế trong khi cải thiện các ví dụ, có vẻ bạn đang theo dõi một cách thú vị nhỉ. :) Độ khó sẽ tăng lên một chút ở phần sau, nhưng còn nhiều nội dung thú vị hơn đang chờ đợi, nên bạn hãy cố gắng hoàn thành khóa học nhé. Nếu có phần nào thắc mắc hoặc cần chỉnh sửa, hãy liên hệ bất cứ lúc nào nhé. Chúc bạn có một buổi tối Thứ Sáu tuyệt vời và những ngày hạnh phúc.

  • soljie742878님의 프로필 이미지
    soljie742878

    Đánh giá 2

    Đánh giá trung bình 5.0

    Đã chỉnh sửa

    5

    100% đã tham gia

    Tiếp theo phần cơ bản, đây dường như là khóa học tốt nhất về lập trình hướng đối tượng. Nội dung rất đầy đủ, được cấu trúc chặt chẽ từ khái niệm đến ví dụ.

    • eternity
      Giảng viên

      Cảm ơn soljie74 đã để lại đánh giá khóa học. Nếu khóa 'Object - Cơ bản' giải thích cách viết code hướng đối tượng, thì khóa 'Object - Nguyên tắc thiết kế' đã cố gắng giải thích cách cải thiện bằng thiết kế hướng đối tượng, và thật may mắn khi khóa học đã giúp ích cho bạn. Nếu có bất kỳ phần nào thắc mắc hoặc cần chỉnh sửa, hãy liên hệ bất cứ lúc nào nhé. Chúc mừng bạn đã hoàn thành khóa học và chúc bạn cuối tuần vui vẻ!

  • 개발인생님의 프로필 이미지
    개발인생

    Đánh giá 2

    Đánh giá trung bình 5.0

    5

    100% đã tham gia

    Tôi đã nghe bài giảng rất thú vị. Tôi cứ nghĩ mình đã hiểu rõ các nguyên tắc thiết kế, nhưng thật ngạc nhiên là có nhiều điều tôi đã hiểu sai. Nhờ giảng giải bằng code mà tôi có thể hiểu dễ dàng. Trước đây tôi không biết phải refactoring code như thế nào, nhưng sau khi nghe giảng, tôi đã có thể đặt ra một số tiêu chuẩn rõ ràng. Cảm ơn vì đã tạo ra một bài giảng hay!

    • eternity
      Giảng viên

      Cảm ơn bạn 개발인생 đã để lại đánh giá khóa học. Tôi đã sắp xếp các nguyên tắc thiết kế sao cho có thể áp dụng khi viết mã thực tế, thật may là nó đã hữu ích cho bạn. :) Nếu có bất cứ điều gì thắc mắc, hãy cứ để lại câu hỏi bất cứ lúc nào nhé! Chúc mừng bạn đã hoàn thành khóa học và chúc bạn có một tuần mới hạnh phúc.

  • hmmi8175님의 프로필 이미지
    hmmi8175

    Đánh giá 2

    Đánh giá trung bình 5.0

    5

    82% đã tham gia

    Nội dung bài giảng rất hay, và tôi thực sự cảm động khi thấy giảng viên đã vẽ cả sơ đồ để giúp chúng tôi hiểu rõ hơn trong phần hỏi đáp! Xin cảm ơn giảng viên vì một bài giảng tuyệt vời. Tuy nhiên, tôi cảm thấy tiếc vì bài giảng không được thực hiện theo hình thức live coding, điều này khiến học viên tốn năng lượng không cần thiết. Những điểm khiến tôi cảm thấy tốn năng lượng vì đây không phải là live coding khi xem bài giảng như sau: 1. Có những đoạn mã bị thiếu một cách bất ngờ trong các slide PowerPoint hoặc tài liệu. Nếu là live coding, IDE đã có thể bắt lỗi và sẽ không có vấn đề gì. 2. Giảng viên đã cho xem các phương thức thay đổi trong quá trình bài giảng, nhưng tôi tò mò về cách các hàm tạo (constructor) thay đổi và đã cố gắng theo dõi bằng cách xem mã nguồn, nhưng đoạn mã được cung cấp là đoạn mã hoàn chỉnh vào cuối buổi học, nên mã nguồn không khớp. 3. Nội dung về việc chia gói (package) mã nguồn bị lược bỏ và chỉ xuất hiện trong đoạn mã hoàn chỉnh. Tôi không rõ quan điểm của những học viên chỉ xem và hiểu, nhưng đối với một người vừa gõ mã vừa nghe giảng, những điểm này gây bất tiện. Dù không sao khi xem lại nhiều lần để ôn tập, nhưng tôi cảm thấy tiếc vì phải tốn năng lượng ngoài việc chỉ đơn thuần cố gắng hiểu bài giảng. Nói một cách ngắn gọn, tôi có cảm giác như giảng viên đang viết một cuốn sách hay và đọc nó lên, hơn là tận dụng những lợi thế của một bài giảng VOD. Tuy nhiên, nội dung bài giảng tự nó rất xuất sắc, vì vậy tôi xin cảm ơn giảng viên đã mang đến một bài giảng chất lượng.

    • eternity
      Giảng viên

      Xin chào anh Kim Cheol-jun. Cảm ơn anh đã để lại đánh giá tốt. Việc tạo từng trang tài liệu bài giảng rất khó khăn, nên tôi rất cảm ơn vì anh đã đánh giá cao. 🙂 Khi giảng dạy trong một thời gian dài, tôi nhận ra rằng mỗi học viên đều có những sở thích đa dạng. Có người thích học trực tiếp, có người thích học trực tuyến, và có người lại thích kiểu bài giảng truyền thống thay vì lập trình trực tiếp (live coding). Vì vậy, điều quan trọng là học viên phải chọn khóa học phù hợp với sở thích cá nhân khi lựa chọn bài giảng, và giảng viên cũng phải cân nhắc giữa các sở thích khác nhau của từng cá nhân và việc chọn định dạng phù hợp cho bài giảng. Cốt lõi của Lập trình hướng đối tượng - Nguyên tắc thiết kế không phải là code, mà là truyền đạt cách nhà phát triển tư duy theo tiêu chí nào và cách họ đánh đổi trong mỗi khoảnh khắc. Và thiết kế không chỉ dừng lại ở một lớp (class) hay một phương thức (method), mà trọng tâm là việc phân phối trách nhiệm và quản lý sự phụ thuộc trên nhiều lớp. Vấn đề của live coding ở đây là nó giới hạn tầm nhìn của học viên tại một thời điểm chỉ vào một lớp hoặc một phương thức. Vì vậy, để thảo luận về thiết kế, việc thể hiện trực quan các thay đổi và mối quan hệ của nhiều lớp sẽ hữu ích hơn rất nhiều. Khi số lượng lớp được sửa đổi cùng lúc càng nhiều, năng lượng cần thiết để nắm bắt cấu trúc tổng thể – xem lớp nào bị ảnh hưởng như thế nào theo những thay đổi code giữa chừng – sẽ lớn hơn nhiều so với việc tiêu tốn năng lượng không cần thiết do không tiến hành live coding như anh đã đề cập trong đánh giá. Do đó, anh có thể xem xét rằng bài giảng được thiết kế theo cách giúp học viên giảm bớt năng lượng để hiểu được luồng thiết kế. Ưu điểm này lớn hơn nhiều so với nhược điểm mà anh đã nói, nên tôi đã chọn phương pháp hiện tại. 🙂 Như tôi đã đề cập, mỗi người có sở thích khác nhau và có lẽ anh Kim Cheol-jun quen thuộc và phù hợp với các khóa học được tiến hành hoàn toàn bằng live coding từ đầu đến cuối. Bài giảng của tôi cũng có thể bổ sung live coding như phần "오브젝트 - 기초편" (Object - Phần cơ bản), nhưng nếu chủ đề là thiết kế, thì định dạng hiện tại sẽ là trọng tâm và live coding sẽ được bổ sung. Tôi rất cảm ơn vì anh đã đóng góp ý kiến quý báu về phương pháp giảng dạy. Tôi sẽ tiếp tục suy nghĩ để có những bài giảng tốt hơn trong tương lai. Ngay cả khi phương pháp hiện tại không hoàn toàn phù hợp với phong cách học của anh Kim Cheol-jun, tôi tin rằng các nguyên tắc thiết kế tự thân chắc chắn sẽ hữu ích cho anh. Nếu anh quen thuộc hơn với phương pháp live coding, việc nghe thêm các bài giảng bổ trợ theo phong cách đó cũng có thể là một ý hay. Chúc anh có một khởi đầu tuần mới hạnh phúc và luôn gặt hái được sự phát triển!

2.298.364 ₫

Khóa học khác của eternity

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!