zoukankan      html  css  js  c++  java
  • 面向对象

    面向对象

    面向对象(Object Oriented,OO)是软件开发方法。面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术[1] 发展到一定阶段后的产物。

    ——百度百科

    • 核心:实现了面向对象的核心思想
    • 编程思想:
      需求==》建立思路==》目标代码

    面向过程的编程思想

    哥德巴赫猜想:

    1. 让用户输入一个数
      1).是不是大于6
      2).是不是偶数
      3).是不是数
    2. 对输入的数拆分
    3. 分别验证是不是质数

    自顶向下逐步求精
    将一个程序打散成n多个小程序,再将程序进一步细化,直到整理出最终代码为止

    • 独立过程
      哥德巴赫猜想:
      n=a+b;
      判断a和b的过程,是独立的,相互之间互不影响

    函数是对抽取出来的独立的过程的封装

    淘宝:
    1.登陆浏览器2.登陆3.验证用户合法性4.浏览商品5.添加购物车6.下订单7.填写收货地
    址。。。。。。
    不适用于多过程的复杂需求

    第一个面向对象的编程语言:SmallTalk
    C语言==》C++加入了面向对象的思想
    面向对象的革命:Java(纯面向对象的语言)

    对象

    万物皆对象:一切客观存在的事物
    唯物主义哲学思想
    例如:显示屏,桌椅板凳,错误(客观存在)

    • 对象
      1.有什么:属性
      2.能干什么:方法

      例如:
      电脑:
      有什么:显示器,鼠标,键盘,主机。。。
      能做什么:上网,打游戏,学习。。。
      除了属性和方法之外没有我们需要关注的东西。

    • 对象的属性

    对象的属性可能又是一个对象

    • 对象的方法

    对象的方法的使用者,一定也是一个对象,(这个对象可能是别的对象,也可能是自己)

    • 客观世界是由对象组成
    1. 小对象组成大对象(小对象作为大对象的属性而存在)
    2. 对象的方法彼此间相互调用
    • 如何建立解题思路

    例如:校外实训:郑州==》北京

    1. 找对象
      有交通运输的方法(小黄车,摩拜单车,摩的,汽车,高铁,飞机)
    2. 找方法
      调用交通工具的运输方法
    • 解决客观问题的方法
    1. 把解决问题所需要的对象准备好
    2. 考虑对象之间如何配合,完成需求
    • 小结
    1. 面向过程的编程思想:自顶向下,逐步求精(适合于解决简单问题)
    2. 面向对象的编程思想:找到合适的对象是第一位,需要什么方法是第二位

    面向对象在计算机领域中的使用

    计算机需求,来源于客观世界
    把客观世界的需求,用计算机来实现

    例如:
    京东:
    需求:在人类社会中,有人买东西,有人卖东西
    解决:利用了计算机网络,解决人和人之间的交易行为(没有计算,这样的需求依旧存在)

    QQ:
    需求:人与人之间有交流的需求
    解决:利用计算机解决
    用计算机解决问题:用面向对象的思想解决,和现实世界高度统一(生活中怎么解决这个问题,用计算就怎么解
    决)

    • 计算机中的对象

    在JVM中一块连续的存储空间(数据,代表生活中的对象)
    例如:
    学生管理系统:

    1. 人工:建立档案册,记录学生信息(管理的对象:学生,有血有肉的人)
    2. 计算机:建立档案册,记录学生信息(管理的对象:计算机在存储空间中表示的学生,其属性是需要的属性)
    • 小结
      面向对象的思想为解决生活中的问题提供了思路,应对复杂的需求
      一个系统,越接近生活,越是合理(生活是最合理的)
    1. 各司其职,对象应该保持简单性
    2. 弱耦合性,对象和对象之间的联系,尽量弱化
    3. 可重用性,创建对象下一次可以拿来直接用
    4. 可扩展性,在原有的功能基础之上曾加新功能

    oop面向对象的编程思想Object Oriented Programming

    1. 面向对象的语法:编译通过
    2. 面向对象的思想:要按照以上4点纲领

    面向对象的三大特性

    封装,继承,多态(三大基石)

    大专栏  面向对象

    • 定义
      封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

      封装把对象的所有组成部分组合在一起,定义程序如何引用对象的数据,封装实际上使用方法将类的数据隐藏起来,控制用户对类的修改和访问数据的程度。

      适当的封装可以让程式码更容易理解和维护,也加强了程式码的安全性。

    • 特点
      对象会有明确的边界,保护对象中的属性‐‐‐‐数据隐藏
      封装的粒度(不宜过大,也不宜过小)
      public 公开的,不受边界的控制
      private 私有的,只能在本类中使用,无法突破边界
      (提供对应的get/set方法)
      好处:提供约束,设置只读性
      方法私有:private 返回值类型 方法名(参数列表)
      方法公开:声明公开,实现隐藏(在声明不变的情况下,如果实现改变,对架构的影响最小)

    继承

    父类‐‐子类(有继承关系) 父类把子类的共性抽取出来
    关键字:extends
    class 子类 extends 父类{}

    • 特点
    1. 子类可以继承父类中的方法和属性
    2. 可扩展性(子类,重用父类中的方法)
    • 本质
      Animal‐‐Dog
      创建过程:先创建父类对象,后创建子类对象,父类对象作为子类对象的的一部分
      访问修饰符:从严到宽
      private 私有的 本类内部(不能被继承)
      default 默认的 本类内部+同包可以访问+同包子类(可能被继承)
      protected 受保护的 同包+不同包子类
      public 公开的 全能访问

      构造方法不能被继承

    方法覆盖

    子类用特殊的方法实现,替换了父类中的一般方法实现
    语法要求:

    1. 返回类型,方法名,参数列表和父类相同(参数列表变化,就是重载)
    2. 访问修饰符:相同,或者更宽
    3. 不能抛出比父类更多的异常

    对象构造的过程

    1. 分配空间:本类和父类一并分配空间,所有的属性被赋予默认值
    2. 递归的构造父类对象(初始化分类的属性,调用父类的构造方法)
    3. 初始化属性
    4. 调用构造方法

    super

    1. 在构造方法中指定调用父类的哪一个构造方法
    2. 必须在构造方法的第一个语句
    3. 如果一个构造方法的第一句,不指定this也不指定super 系统默认添加super();
    4. 表示父类对象,区分父类被遮盖的属性,或者调用父类被覆盖的方法
    • 小结
      系统默认添加:
      构造方法第一行:super();
      没有写构造方法:公开的无参构造
      每个程序:import java.lang.*;
      super常常用来把构造参数传递给父类

    JAVA继承的分类

    继承分为单继承和多重继承。单继承是指一个子类最多只能有一个父类。多继承是一个子类可以有二个以上的父类。由于多继承会带来二义性,在实际应用中应尽量使用单继承。Java语言中的类只支持单继承,而接口支持多继承。Java中多继承的功能是通过接口(interface)来间接实现的。

    一个类最多只能有一个直接父类,这点和C++不同!

    多态

    编译时多态(方法重载) 运行时多态(引用多态)

    1. 子类对象可以看成是父类对象(继承关系合理)
    2. 父类引用指向子类对象

    多态规则:

    1. 对象类型不变
    2. 只能调用引用类型中所声明的方法
    3. 发生了方法覆盖,调用覆盖后的方法

    引用之间的传递

    1. 子类对象的引用可以直接赋值给父类引用
    2. 父类引用给子类引用赋值,需要强制类型转换
    3. 在强制类型转换之前要用instanceof 判断,避免类型转换异常
      引用 instanceof 类名 (表示:引用是否和类名相互兼容)

    多态作用

    将多个对象统一看做是同一个父类对象,屏蔽子类之间的差异,增加程序的灵活性和通用性。

    多态的方法

    1. 方法声明中的形参可以用父类引用来表示,实参用子类对象来传输
    2. 用父类作为返回值类型
  • 相关阅读:
    Could not find the Qt platform plugin windows错误解决方法
    解决MySQL 8.0数据库出现乱码的问题
    C# Winform程序设计运行在高分屏下模糊解决办法
    如何配置SQL Server数据库远程连接
    PyCharm安装及使用教程
    Chrome谷歌浏览器实用插件
    Visual Studio 2017中如何创建安装打包项目
    Python如何打包EXE可执行文件
    C#中控制线程池的执行顺序
    .net core 部署在Centos 7/8 的几个小坑
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12256346.html
Copyright © 2011-2022 走看看