当前位置: 首页 > news >正文

对象引论

专栏目的:

传统的学习方式都是罗列知识点,达到全面学习的目的。但是这样的缺陷就是不能很深刻理解这些知识。所以我们得学习的观念应该不仅仅是全面性,还有就是明天它是从那里来,解决了什么问题,并且学习处理这些问题的新的思维方式。总体来说就是全面,根源,场景,新思维。

章节解读思路:

首先学习一定要系统,所以我先做了一个思维导图去整体把握。然后是具体分析每个点,分析他们之间的联系。主要是要知道这个知识点在解决什么问题,它的思路是怎么样的,看待问题的方式是怎么样的。对于一些很容易的知识点就没有详细探讨了。

整个章节的知识点的整理(全面):

图片描述

具体章节思考(根源,场景,新思维):

脉络

整个章节的脉络其实很清晰,就是首先谈论的就是面向对象的思维,然后就是java怎么去实现的。

面向对象

我们思考一个问题?计算机在帮助我们人类解决问题。但是计算机解决问题的方式需要计算机能读懂的方式。这样就有了机器模型和具体问题模型之间转换的问题。那么我们学习的这么的语言就在充当这种将具体问题模型转换为机器模型的桥梁。基于对比我们很清楚,像c语言是面向过程的语言,这种语言更加的偏向机器,更加讨好计算机,这样的缺陷就是开发者转换模型比较麻烦。但是面向对象语言就将这种缺陷解决了。我们将程序当作很多的对象的集合,整个程序的运作都是在发送消息然后进行操作。这样程序就像我们很多人类在协同合作,有了属性和行为。这样我们去开发的时候就很像自己在操作一样,思考上去更加方便。总体来说语言就是在转换机器模型和具体问题模型的桥梁,面向对象语言更加偏向我们人类的思考方式的桥梁。

面向接口

我们虽然将一切东西都当作是对象,但是去解决具体问题更多的在于去对象去执行某一个操作。所以我们去写程序的角度不仅仅是我们需要怎么去抽象一切事物为一个class,同时我们需要知道我们需要这个对象去做什么。可以说抽象事物是面向对象编程的基础,而面向接口就是将一切对象运作起来去解决问题。这里面新颖的思维就是面向接口编程。

隐藏具体实现

我们将一切抽象为对象之后,那么其中一些是可以共用的,所以就有了类库。在这里我们可以将程序员分为两种,一个是类创建者,一个就是类使用者。一个类里面肯定有些信息是很重要的,修改一些内容将对该类的改变很大。但是对于类使用者来说其实并不重要。那么这个时候我们只将类使用者需要的东西暴露给他,而将很敏感的关键处给隐藏,这样的设计将会更加安全,更加的健壮。所以隐藏具体实现其实更多的是为了解决安全性的问题,当然也有权限的问题。

复用代码

我之前谈到共用的问题,其实这里面也有复用。那么我们说到复用其实我们很容易想到,继承。但是复用代码是不是只有继承呢?不是,其实还有一种我们经常会用,叫做组合。简单的将就是在同一个类里面将另外一个类当作一个属性。我觉得这种考虑,打开了对于复用代码的这种理解,值得记录。

向上转型

我们在写程序的时候会尽量想写一些没有继承的类,因为这样比较干净,不会受父类的影响。我们更想要当作基类,这样更少依赖特定类型。接口就实现了这个功能。比如三角形和圆形都有计算面积的行为。我们可以写一个几何图形的接口,然后三角形和圆形去实现就好了。但是我们执行程序的时候就不知道执行的是三角形还是圆形,那么java在这里就做了处理。这样的好处就是对于我们之前写好的代码如果需要修改实现方式,不会影响该接口的使用。这也是向上转型的魅力所在。

向下转型和范型

有了向上转型,肯定就有向下转型。那么什么是向下转型呢。就是我们将一个对象A存储到一个普通数组,这个时候存储进取的是object,而不是A。然后我们需要将A取出来,这个时候取的是object的引用,但是A里面的方法就被隐藏了。所以我们需要将取出来的object强制转换为A。那么对于我处处了A和B,那么我们怎么知道取出来的是A或者B呢。所以这个时候就需要范型去限定存储的对象是怎么类型,当我们向下转型的时候就不会出错了。

相关文章:

  • Windows Core OS预计将更多地依赖于这些组件
  • 【技术性】Search知识
  • 什么是Javascript函数节流?
  • C语言小程序-基于链表的学生信息管理
  • js基础
  • 前嗅ForeSpider教程:创建模板
  • spring cloud构建互联网分布式微服务云平台-SpringCloud集成项目简介
  • MySQL无法启动几种常见问题小结
  • C语言笔记(第一章:C语言编程)
  • sqoop使用手册--mysql配置
  • width 值 max-content、fill-available、min-content 对应作用
  • multimap详讲
  • 剑指offer-树的子结构
  • JavaScript HTML DOM
  • js提交表单错误:document.form.submit() is not a function
  • 网络传输文件的问题
  • Angular 4.x 动态创建组件
  • angular学习第一篇-----环境搭建
  • eclipse的离线汉化
  • Intervention/image 图片处理扩展包的安装和使用
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript 一些 DOM 的知识点
  • Java比较器对数组,集合排序
  • JAVA多线程机制解析-volatilesynchronized
  • mysql中InnoDB引擎中页的概念
  • PHP变量
  • python 装饰器(一)
  • spring boot 整合mybatis 无法输出sql的问题
  • Spring声明式事务管理之一:五大属性分析
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 手机端车牌号码键盘的vue组件
  • 微信公众号开发小记——5.python微信红包
  • 2017年360最后一道编程题
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • #QT(智能家居界面-界面切换)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • (react踩过的坑)antd 如何同时获取一个select 的value和 label值
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)可以带来幸福的一本书
  • .NET Core 中插件式开发实现
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇
  • .net 中viewstate的原理和使用
  • .Net接口调试与案例
  • /proc/stat文件详解(翻译)
  • @ConditionalOnProperty注解使用说明