• 面向对象基础01


    编程语言共性:元素+语法+映射
    元素:标识符保留字符号
    数据:类型对象值常量和变量
    操作:运算运算符表达式语句
    流程:流程控制顺序选择循环
    函数:函数参数调用返回值
    函数蕴含了1.(映射)简化2.复用两种非常重要的思想
    函数其实是代码复用的一种最原始的体现。
    简化举例:
    1.一条调用语句代表了n条语句
    2.吃苹果代表了现实世界的吃苹果
    文字->现实世界
    有穷集->无穷集
    基本元素、规则(有穷集)->基本元素+规则(无穷集)->现实世界(无穷集)
    例子1:自然数(元素+语法+映射)
    最简单的语言:自然数-最简单的语言:自然数->现实世界数量的概念
    基本元素:0,1,2,3,4,5,6,7,8,9
    语法:形成一个n个字符的序列
    映射:一一映射
    基本元素10个、语法1条(有穷集)->自然数(无穷集)->现实世界数量的概念(无穷集)
    代码复用3个级别:
    1.本项目内代码复用。
    2.多个项目的代码复用。
    3.某一领域内代码复用。

    ---<面向对象>---5个核心词:类、对象、封装、继承、多态
    //是计算机编程技术发展到一定阶段后的产物。

    面向对象是一种软件设计思想。是一种对现实世界理解和抽象的方法。
    对象多如狗。核心是对象。对象是对现实世界事物的抽象。
    封装、继承、多态是面向对象的3大特征。3大特征具有层次性。
    3个特征一起才能较好地反映客观世界。

    原因:面向过程的思想难以实现越来越复杂的系统。开发不高效。
    优势:面向对象通过不同层次抽象来简化复杂系统设计,并提供不同级别的复用。

    代码复用3个级别:
    1.本项目内代码复用。函数,继承。
    2.多个项目的代码复用。类,继承。
    3.某一领域内代码复用。框架。


    把现实世界的事物抽象成对象。相似的对象抽象成为类。
    类被实现为一种数据类型,而对象是该数据类型的一个实例。
    (或抽象数据类型,以示它和面向过程中基本数据类型、结构体等类型的区别)
    (如:我们一说抽象数据类型,就知道指的是类而不是结构体。)
    类和对象关系:
    (1)类是抽象,对象是具体。
    (2)通过抽象的类定义具体的对象。
    (3)1个类对应n个对象。
    //具体和抽象都是相对的。类相对对象是抽象,对象相对现实世界的事物是抽象。

    ---<封装>---
    划分边界,对象成为独立的个体,有了对象内和对象外。对象内高内聚,对象之间低耦合。
    //划分边界,产生个体,有了内外。再谈高内聚和低耦合。

    封装是通过对象实现和体现的。
    装:对象就像一个容器,将相关的数据和方法装在一起。
    封:对象作为一个整体,划分了边界,对象内和对象外。只对外提供必要的服务。
    ---<封装的优点>
    划分边界,高内聚,低耦合。
    使用简单:使用者只用关注对象提供的服务。(公有的部分)
    便于管理,信息隐藏,减少错误。

    //---这导致很多人,比如以前的我以为面向对象的特征还包括抽象或类、对象
    //-1- 其实如果理解了对象和封装的关系,类、对象和封装意思差不多的。
    //对象、封装本来就是一种重复的说法,一般说特征的时候我们只用封装就可以了。
    //-2- 至于抽象,抽象思想的应用范围非常广泛,应用于各种科学领域。
    //抽象可不是面向对象的特有的,我们一般说面向对象使用了抽象思想。

    结论:面向对象3大特征是封装,继承和多态。对象多如狗。3个特征具有层次性。
    //面向对象的特征包括对象或抽象这种说法当然也正确,3大特征的说法更清晰易理解。

    ---非常重要:
    怎么说都正确。正确理解面向对象才是重点@_@!..
    ---<继承>
    来源:现实事物间的继承关系抽象成类之间的继承关系。、
    表现:类之间的继承关系。子类继承父类的东西。通过权限控制继承。
    基础:继承基于类(没有类哪来的类之间的继承关系)。
    //通过权限控制,控制继承和访问。private不能被继承,protected和public可以被继承。

    ---<多态>
    来源:相同的消息,不同的对象有不同的行为。
    表现:子类可以覆盖父类的方法表现出多态,或者不覆盖不表现多态。非常灵活。
    基础:多态基于继承。

    ---<硬编码和软编码>
    硬编码将程序风险部分写在源代码中,软编码将风险部分暴露在配置文件中。
    如果风险部分需要改变,则硬编码必须修改源码,重新编译整个程序并重新部署。
    软编码只需要修改配置文件中的参数,不需要修改源码。

    优缺点:硬编码效率低下,太麻烦。如果可以使用软编码,绝对不要使用硬编码。

    案例1:数据库迁移。
    1.将数据从旧库迁移到新库。//此期间程序能够正常运行
    2.修改程序,使用新库。//此期间程序必须终止运行
    硬编码:
    修改程序时,必须修改源代码,重新编译并部署程序。
    占用时间长,影响程序正常运行。太麻烦,效率低下。
    软编码:
    只需要修改配置文件,设置成新的数据库。占用时间非常短,几乎不影响程序正常运行。

    1.什么是面向对象?
    面向对象是一种软件设计思想,核心是对象,有封装,继承,多态三大特征。

    2.什么是对象?
    对象在代码中,指的是一种代码单元,它具有属性和方法,是一种相对独立的单位。

    3.软件设计?
    软件设计简单来说,就是为满足现实世界的需求,设计出相应的编程语言描述的逻辑。

    软件设计的起点:
    现实世界
    软件设计的终点:
    编程语言描述的逻辑。

    为了提高开发效率,软件设计的2个主要目标:1.简化设计 2.代码重用
    软件的复杂程度:这里简单的用代码行数来表达。比方一个普通的项目需要10万行代码

    例子1:
    2018年你从零开发了一个10万行代码的项目,花了1年时间。
    2019年你又从零开发了一个10万行代码的项目,花了1年时间。
    思考:
    你在开发的过程中,发现2个项目,存在很多功能上重复的代码,显然没必要重复编写。
    关键在于,怎么处理这些可能被再次使用的代码。
    需要提供一种代码重用的机制。

    例子2:
    1.有一天你需要把地里的杂草除掉。为此你做了一个锄头,用锄头把草除掉了。
    2.又有一天你需要种树。你发现自己需要挖坑,哦你想起来上次除草做了个锄头,
    锄头可以挖坑,于是你把锄头拿了过来,挖坑种树。
    思考:
    显然我们为了种树,只需要拿出上次的锄头,这样极大的提高了生产效率。
    没必要再重新制作一个新的工具。因为锄头完全可以满足我们的需求。

    比喻:
    这里用现实世界和代码开发做了一个比喻。
    注意:只有在2者之间存在相似的地方,比喻才是恰当的。

    4.再谈对象
    对象,实现了软件设计2个主要目标。1.简化设计 2.代码重用。

    1.简化设计方面
    软件设计的起点,是现实世界,终点是代码。也就是说代码来源于现实世界。
    我们很容易建立现实事物和代码世界中对象这种代码单元的映射。尽管有时候不是这样的。
    换种说法,我们很容易将现实事物,转化为代码中的对象。
    例子:
    现实世界:员工,有工资,工龄,职位,可以加薪,升职。
    ---<我们非常容易就可以将现实世界中的员工映射到代码世界中>---
    代码世界:
    Employee类
    属性:salary,workYear,position
    方法:riseSalary();risePosition();
    注意:将现实事物映射到代码世界的结果并不唯一,我们想表达的只是对象的产生让实现这种映射很容易。
    尽管有时候不是这样的。

    2.代码重用方面
    对象中的继承,提供了一种代码重用的方法。

  • 相关阅读:
    PriorityQueue详解
    Queue介绍
    Dubbo面试踩坑
    Java中Integer和ThreadLocal
    Java中Deque特性及API
    由ubuntu装好想到的
    双系统试水上岸
    终于意识到BIM确实火了
    读阿里机器学习平台的一些总结
    继续ubuntu和遇到的easybcd的坑
  • 原文地址:https://www.cnblogs.com/mozq/p/10163232.html
Copyright © 2020-2023  润新知