OOP面向对象七大原则(个人总结)


简述

  • 开闭原则:对扩展开放,对修改关闭
  • 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立
  • 依赖倒置原则:要面向接口编程,不要面向实现编程
  • 单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性
  • 接口隔离原则:要为各个类建立它们需要的专用接口
  • 迪米特法则:只与你的朋友直接交谈,不跟“陌生人”说话
  • 合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现

开闭原则

当应用需求发生改变的时候,我们尽量不要修改源代码,可以对其进行扩展,扩展的功能块不会影响到原来的功能块。


里氏替换原则

子类可以扩展父类的功能(重写,覆盖),但是尽量不要覆盖父类的方法,这样会使整个体系的可复用性变低;多态运用比较频繁时,容易出现问题。可以通过编写新的方法,来扩充子类的方法。
关于里氏替换原则有一个出名的例子:正方形不是长方形
(企鹅和鸵鸟,虽然属于鸟类,但是他们不会飞,所以也不能成为鸟的子类)


依赖倒置原则

高层的模块不要依赖于低层的模块,抽象不依赖细节,细节应该依赖抽象;面向接口编程,降低程序的耦合性。因为具体的实现具有多变性,但是接口一般来说都是稳定的(持久层)。


单一职责原则

一个对象不应该承担太多的职责,也就是不能所有相关的方法都写在一个类里,这样耦合度太高,也就是所谓的类的粒度粗;应当是把必须的或者合适的方法写在一个类中,降低耦合度,提高其内聚性。


接口隔离原则

和单一职责原则很像,都是为了降低耦合度,提高内聚性。为各个类建立他们需要的专用接口。


迪米特法则

《程序员修炼之道》,举个例子:A和B是朋友,B和C是朋友,A和C是陌生的;如果A想让C做一件事情必须先和B进行沟通,B在和C进行沟通,A和C不要直接进行沟通。朋友在这里类似于聚合或者组合这样的关系,可以通过转发来实现,目的也是为了降低耦合度,提高模块之间的独立性。
迪米特法则的弊端:会产生很多的中介类,增加一些系统的复杂性。使用时需要考虑系统架构和结构的清晰性。


合成复用原则

类鱼类之间尽量使用组合或者聚合的关系,这样可以提高系统的灵活度和复用性,使用“has a”关系,而不用“is a”关系,继承要遵守里氏替换原则,子类继承了父类的一些特性,尽量不覆盖重写父类方法,这样就失去了代码的灵活性,所以合成复用原则和里氏替换原则是相辅相成的,要思考清楚。


结语:在平时编码中,尽量多的去考虑到OOP的七大原则,在23中设计模式中,可以看出这些原则的重要性,其中开闭原则是最重要的,是其它原则的基础。
笔记中有错别字的地方,还请大家谅解,如有发现,评论区指出,谢谢!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java OOP面向对象十二章书虫阅读器代码是一个用于管理和操作图书馆的应用程序。以下是该应用程序的主要功能和代码示例: 1. 图书类(Book): - 属性:书名(title)、作者(author)、出版社(publisher)、ISBN号(isbn) - 方法:获取书名、获取作者、获取出版社、获取ISBN号 ```java public class Book { private String title; private String author; private String publisher; private String isbn; public Book(String title, String author, String publisher, String isbn) { this.title = title; this.author = author; this.publisher = publisher; this.isbn = isbn; } public String getTitle() { return title; } public String getAuthor() { return author; } public String getPublisher() { return publisher; } public String getIsbn() { return isbn; } } ``` 2. 图书馆类(Library): - 属性:图书列表(books) - 方法:添加图书、删除图书、查找图书、显示所有图书 ```java import java.util.ArrayList; import java.util.List; public class Library { private List<Book> books; public Library() { books = new ArrayList<>(); } public void addBook(Book book) { books.add(book); } public void removeBook(Book book) { books.remove(book); } public Book findBook(String title) { for (Book book : books) { if (book.getTitle().equals(title)) { return book; } } return null; } public void displayBooks() { for (Book book : books) { System.out.println("Title: " + book.getTitle()); System.out.println("Author: " + book.getAuthor()); System.out.println("Publisher: " + book.getPublisher()); System.out.println("ISBN: " + book.getIsbn()); System.out.println("----------"); } } } ``` 以上是一个简单的图书馆管理系统的代码示例,包括了图书类和图书馆类。你可以根据需求进行扩展和修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值