孤尽训练营打卡日记day17--面向对象
前言
Java是一门面向对象的语言,那么问题来了,有人会问,老师,我没对象,我该怎么办,老师会发么还是要自己带,此对象非彼对象,今天我们一起来学习一下面向对象的编程思想。
面向对象编程(Object-Oriented Programming,OOP)
是划时代的编程思想变革,推动了高级语言的快速发展和工业化进程。OOP 的抽象、封装、继承、多态的理念使软件大规模化成为可能,有效地降低了软件开发的成本、维护成本和复用成本。面向对象编程思想是大型软件的开发就像搭积木一样隔离可控、高效简单,是当今编程领域的一股势不可挡的潮流。OOP实践了软件工程的三个主要目标:可维护、可重用和可扩展性
对象
万物皆对象,你所能看到的、摸到的、听到的都可以是对象。对象是一个自包含的实体,用一组属性 + 行为标识,谁拥有数据谁就拥有操作的方法。
面向对象的三大特性
封装
封装是一种对象功能内聚的表现形式,是功能之间的耦合度降低,更具有维护性。每个对象都包含他能进行操作所需要的所有信息,因此对象不必依赖其他对象来完成自己的操作
属性私有,对外提供可操作的方法
优点:
- 减少耦合
- 类内部实现可以自由的修改
- 类有清晰的对外接口,外界不需要内的内部操作
示例:狗拥有叫这个属性,shout 属性私有,别的类通过 get 和 set 方法访问属性或修改属性
class Dog{private String shout= "汪汪汪";public String getShout(){return shout;}public void setShout(String shout){this.shout= shout;}
}
继承
继承使子类能够继承父类,获得父类的部分属性和行为,使得模块更具复用性
对象继承代表一种 a is A 的关系,a是子类,A是父类,也就是 a 是 A,狗 是 动物,狗 就 继承了动物。还可以理解为是对被继承者的特殊化,因为它除了具备被继承者的特性外,还具备自己独有的特性。
继承定义了类如何相互关联,共享特。继承的工作方式是,定义父类和子类,或者说是基类和派生类,其中子类继承父类的所有特性。子类不但继承了父类的所有特性,还可以定义新的特性。
优点:
- 继承使得所有子类的公共部分放在了父类,使得代码共享,避免重复
- 继承使得修改或扩展而来的实现都比较容易
缺点:
- 父类变子类也要跟着变
- 父类的实现细节暴露给了子类,破坏了封装,增加了耦合(组合优于继承)
示例:狗和猫都是动物,狗 和 猫都继承了动物,狗会游泳,猫会爬树
class Animal{private String shout;public String getShout(){return shout;}public void setShout(String shout){this.shout= shout;}
}class Dog extends Animal{private String swim;}class Cat extends Animal{private String goTree;}
多态
多态使模块在复用性基础上更加有扩展性,使系统运行更有想象空间。
多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。子类可以使用 override 关键字,将父类实现替换为他自己的实现,这就是方法重写或者方法改写。
示例:动物都会叫,但是猫是喵喵喵,狗是汪汪汪,我们把shout 改成 方法
class Animal{String shout();
}class Dog extends Animal{@Overidepublic String shout(){System.out.println("汪汪汪");}}class Cat extends Animal{@Overidepublic String shout(){System.out.println("喵喵喵");}}
抽象(第四大特性)
对需求进行业务抽象和建模分析,通过模型组合去解决某一类问题。
上面我举得例子,动物其实是无法实例化的,猫和狗我们都能想象出来一个具体的物体,而动物是一类的统称,所以就延伸了抽象的概念 abstract。
抽象类通常代表一个抽象概念,他提供一个继承的出发点,当设计一个新的抽象类时,一定是用来继承的,所以,在一个以继承关系形成的等级结构里面,树叶节点应当是具体类,而树枝节点是抽象类。
梧高凤必至,花香蝶自来
参考文档:
无尘老师PPT
《大话设计模式》 --程杰
孤尽训练营打卡日记day17--面向对象相关推荐
- 孤尽训练营打卡日记day28--第四周总结
前言 光阴似箭,日月如梭.转眼已经过去了一个月,孤尽训练营第四周也已经结束,今天我们一起来对这一周的内容做个简单回顾. 第一次课 单元测试和系统安全规约 什么是单元测试? 对软件组成单元进行的测试,其 ...
- 孤尽训练营打卡日记day14--第二周总结
前言 光阴似箭,日月如梭!跟着孤尽老师学习的第二周也即将结束,训练营的日子也已经过去了一半.古人云,学而不思则罔,思而不学则殆.今天我们来对第二周的学习做个总结. 内容回顾 day08 首先,孤尽老师 ...
- 孤尽训练营打卡日记day24--系统安全规约
前言 现在是大数据的时代,数据是非常重要的,一张照片就有可能泄漏了你的位置信息.在我们的系统中,安全一直是老生常谈的话题,怎么维护我们的系统安全,在我们日常开发中,怎么避免出现安全问题,我们跟着Joe ...
- 孤尽训练营打卡日记day04--MySQL优化
前言 数据库在系统中是非常重要的一环,当数据量大的时候,数据库就会有瓶颈,也就是查询变慢,我们需要对数据库进行优化 建表时优化 Schema 和数据类型优化 整数 TinyInt,SmallInt,M ...
- 孤尽训练营打卡日记day19--OAuth2基础
前言 我们现在的系统架构都是微服务的架构,也就是说,一个完整的功能,是由后台多个工程一起完成的.那么就会有一个问题,明明是多个工程,但是我们只需要登录一次,这是怎么实现的呢?今天我们跟着刘雪松老师一起 ...
- 利用油猴脚本显示扇贝网真实打卡日记
本文首发在我的个人博客:https://jlice.top/p/7kmxm/.欢迎大家前去参观,么么哒~ 前一段时间发现扇贝网页版显示的打卡日记和手机上看到的不一致,感觉应该是网页版开发滞后的原因.这 ...
- day17 面向对象基础
day17 面向对象基础 一.编程思想 1.编程思想:程序员在面对一个问题的时候首先想到的解决这个问题的想法 2.三种编程思想: 面向过程编程(穷人思想) - 会基本语法和逻辑 函数式编程(小资思想) ...
- 训练营打卡Day57
训练营打卡Day57 文章目录 训练营打卡Day57 题121:[1143. 最长公共子序列](https://leetcode.cn/problems/longest-common-subseque ...
- 第三模块 面向对象网络并发编程 | day17 面向对象基础
第三模块 面向对象&网络&并发编程 从今天开始,我们将进入系列课程第3个模块的的学习,此模块包含如下三大部分知识: 面向对象,Python中支持两种编程方式来写代码,分别是:函数式编程 ...
- 训练营打卡Day45
训练营打卡Day45 文章目录 训练营打卡Day45 题105:[70. 爬楼梯](https://leetcode.cn/problems/climbing-stairs/) 思路 代码 题106: ...
最新文章
- 收藏 | 提高数据处理效率的 Pandas 函数方法
- (005)RN开发 js jsx ts tsx的区别
- 做网络推广浅析影响网站打开速度的因素,促进网站SEO优化效果提升!
- MySQL存储日志并使用Loganalyzer作为前端展示
- android gpio操作
- 数据结构实验之数组三:快速转置
- Vue实现仿音乐播放器7-实现音乐榜单效果
- 学霸网站-Beta版本发布说明
- Invocation failed Unexpected end of file from server java.lang.RuntimeException: Invocation failed U
- springboot mybatis 热加载mapper.xml文件(最简单)
- Linux常用命令一 查看系统负载 版本信息 工作目录
- Android瀑布流照片墙实现,体验不规则排列的美感
- 各种数字字体样式_来自中世纪建筑 文化的字体——————哥特式
- epub格式电子书编辑器
- 香农公式说明了什么_香农公式理解
- 跟着团子学SAP DMS—在SAP中通过DMS上传文档基本操作(CV01N/CV02N/CV03N/CV04N)
- 公众号后时代,暴涨100万粉丝、篇篇10w+是如何炼成的?
- MySQL 数据库重启
- 计算机主板维修高手,计算机电路基础与维修高手
- Eclipse的安装步骤
热门文章
- Kotlin细节十五:作用域函数与 this it 关键字
- OpenGL光源光照使用范例
- illegal TFTP operation
- element中form表单输入非负数验证
- MySQL 8.0 新特性之窗口函数
- The server encountered an unexpected condition that prevented it from fulfilling the request.(解决思路)
- 错误-The server encountered an unexpected condition that prevented it from fulfilling the request
- matlab画基因表达热图,科学网—使用pheatmap软件绘制基因表达热图 - 陈振玺的博文...
- 笔记本显示服务器未能登录,win10系统出现User profile service服务未能登录的解决方案...
- 《敏捷教练-如何打造优秀的敏捷团队》读书笔记