【软件基础】面向对象编程知识总结

news2024/11/17 17:36:06

文章目录

  • 前言
  • 一、面向对象要解决的问题
    • 1、 软件重用性差
    • 2、软件可维护性差
    • 3、不能满足用户需求
  • 二、面向对象的基本概念
  • 三、面向对象的特征
  • 四、面向对象的要素
  • 五、面向对象的开发方法
  • 六、面向对象的模型
    • 1、对象模型
    • 2、动态模型
    • 3、功能模型
  • 总结
      • 1、鸭子抽象类
      • 2、鸭子类
      • 3、鸭子动作的抽象接口
      • 4、不同的飞和不同的叫的实现
      • 5、运行效果
      • 6、完整代码


前言

面向对象的本质:通过对象之间的协作完成功能。

面向对象的特点:采用封装、继承、多态和抽象等设计方法。

面向过程和面向对象开发中,在分析问题上的不同:

  • 面向过程:拿到问题分析问题如何解决的步骤;
  • 面向对象:拿到问题分析问题中有哪些类,类的属性与方法,类与类之间的关系。
  • 面向对象遵循:合适的方法应该出现在合适的类中。

一、面向对象要解决的问题

1、 软件重用性差

重用性是在不经过修改或稍加修改就可反复使用的特性。软件重用性是软件工程追求的目标之一。

2、软件可维护性差

在软件开发过程中,始终强调软件的可读性、可修改性、可测试性是软件的重要质量指标。

3、不能满足用户需求

传统结构化方法开发的软件,在需求动态变化时,无法满足用户需求变化的情况。

二、面向对象的基本概念

基本概念说明
对象万物皆可对象,一个整数或一架飞机,一个人,还可表示抽象的规则、事件等
对象的状态和行为对象的状态就是属性,属性就是一个值,行为就是对象的操作或动作
类是相同或相似对象的抽象,对象的抽象是类,类的具体化(实例化)是对象
类的结构客观世界中各类有结构一样,软件中类也有结构。一般有组合(平行)与聚合结构(部分构成主体)
消息和方法对象之间进行通信(交互)的信息称为消息,发送消息要指定接收的对象,对象中的执行方法名

三、面向对象的特征

基本概念说明
封装封装就是在抽象出来的类中,将类对象具有的状态(属性)和行为(方法)放在同一个类中,避免外界任意修改类结构和数据,只向外提供修改内部私有数据的接口
继承如果有几个类比较类似,就可以把这些类抽象出一个基类作为父类,子类共享父类的属性和方法,并可以增加新的属性和方法
多态一条消息发送到不同的对象,不同的对象产生了不同的结果【如消息传播机制】

四、面向对象的要素

基本概念说明
抽象先根据已有的对象分类,抽象出有哪些类,根据具有贤属性和方法的类去造对象
封装性(信息隐藏)封装是保证软件有良好模块性的基础,封装降低了对象之间的依赖,使得模块更加清晰
共享性类的封装体现了对象的共享类的信息,继承体现了子类对父类的信息共享,多态体现了不同对象对消息的共享
强调对象结构而非程序结构以对象及对象建的关系建立整个程序的结构

五、面向对象的开发方法

基本概念说明
基本概念说明
Booch方法最先提出软件开发方法问题,指出面向对象的软件设计不同于传统的功能分解,在于对现实世界的抽象,并将其映射在软件中
Coad方法进一步体现了类和类层次结构的认定
OMT方法“面对对象的建模与设计”
UML(Unified Modeling Language)语言最重要的成果之一就是统一建模语言(UML)的出现,UML是面向对象技术领域占主导地位的标准化建模语言

六、面向对象的模型

1、对象模型

对象模型描述了系统的静态结构,从客观世界对象的关系角度出发,描述在系统中对象之间的关系。主要关心对象的结构、属性、操作,是其他模型的基础。

基本概念说明
对象和类(1)对象:对象建模的目的就是描述对象。(2)类:类是对象的抽象,表示了同一类对象。抽象过程增加了模型的归纳能力。(3)属性指对象具有的属性状态值。(4)操作和方法:操作是对象能够实现的动作或行为。方法是抽象类的时候对对象动作的抽象。
关联和链关联是类之间的联系,链是对象之间的联系。角色说明类在关联中的功能。受限关联对类之间的关联进行条件限制。关联的多重性通常描述为一或多
类的层次结构(1)聚集关系是一种整体-部分的关系。(2)一般化关系主要指基类和子类的继承关系。
对象模型(1)模板:模板是类、关联、一般化结构的逻辑组成。(2)对象模型是由一个或多个模板组成

2、动态模型

动态模型描述系统中控制的过程,或者执行的顺序。即数据的转换状态。

基本概念说明
事件特定时刻发生的某件事
状态对象的属性响应事件,到了某一个状态值
状态图状态图是一个标准的计算机概念。是有限自动机的图形表示。这里把状态图作为建立动态模型的图形工具。状态图是一种图,用结点表示状态,结点用圆圈表示;圆圈内有状态名,用箭头连线表示状态的转换,上面标记事件名,箭头方向表示转换的方向。

3、功能模型

功能模型描述了系统中的计算,即系统由哪些功能组成。即数据的状态转换进行了哪些转换的计算。
功能模型由数张数据流图组成,数据流图由对象、处理、数据流组成。

基本概念说明
对象
处理

总结

以生产一只鸭子对象为例:

1、鸭子抽象类

要有一只鸭子,就首先要有一只鸭子类。鸭子可能有很多类,所以抽象出一个鸭子抽象类。所有的鸭子类都可以通过继承鸭子抽象类产生一个特定种类的鸭子类。

 abstract class Duck
    {
        public IFlyBehavior flyBehavior;
        public IQuackBehavior quackBehavior;

        public Duck()
        {

        }
        public abstract void display();

        public void performFly()
        {
            flyBehavior.fly();
        }
        public void performQuack()
        {
            quackBehavior.quack();
        }

        public void swim() 
        {
            Console.WriteLine("All ducks float, even decoys!");
        }
    }

2、鸭子类

通过继承鸭子抽象类,产生一个特定的鸭子类。继承父类的所有属性与方法,也可产生新的属性和方法。

class ModelDuck : Duck
    {
        public ModelDuck()
        {
            flyBehavior = new FlyNoWay();
            quackBehavior = new Quack();
        }

        public override void display()
        {
            Console.WriteLine("I'm a ModelDuck!\n");
        }
    }

3、鸭子动作的抽象接口

鸭子可能有飞的动作,叫的动作,飞和叫可能有不同的形式。将飞和叫这两种动作分别抽象出接口类,其中有动作接口函数。

interface IFlyBehavior
    {
        void fly();
    }
interface IQuackBehavior
    {
        void quack();
    }

4、不同的飞和不同的叫的实现

 public class FlyWithWinds : IFlyBehavior
    {
        public void fly()
        {
            Console.WriteLine("I'm flying!\n");
        }
    }

public class FlyNoWay : IFlyBehavior
    {
        public void fly()
        {
            Console.WriteLine("I can't flying!\n");
        }
    }
 public class Quack : IQuackBehavior
    {
        public void quack()
        {
            Console.WriteLine("Quack!\n");
        }
    }
    public class MuteQuack : IQuackBehavior
    {
        public void quack()
        {
            Console.WriteLine("<< Silence >>\n");
        }
    }
    public class Squeak : IQuackBehavior
    {
        public void quack()
        {
            Console.WriteLine("Squeak!\n");
        }
    }

5、运行效果

在这里插入图片描述

6、完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace 鸭子模式
{
    class Program
    {
        static void Main(string[] args)
        {
            Duck ModelDuck1 = new ModelDuck();
            ModelDuck1.performFly();
            ModelDuck1.performQuack();
            ModelDuck1.display();

            Console.ReadLine();
        }
    }

    class ModelDuck : Duck
    {
        public ModelDuck()
        {
            flyBehavior = new FlyNoWay();
            quackBehavior = new Quack();
        }

        public override void display()
        {
            Console.WriteLine("I'm a ModelDuck!\n");
        }
    }

    abstract class Duck
    {
        public IFlyBehavior flyBehavior;
        public IQuackBehavior quackBehavior;

        public Duck()
        {

        }
        public abstract void display();

        public void performFly()
        {
            flyBehavior.fly();
        }
        public void performQuack()
        {
            quackBehavior.quack();
        }

        public void swim() 
        {
            Console.WriteLine("All ducks float, even decoys!");
        }
    }

    interface IFlyBehavior
    {
        void fly();
    }

    public class FlyWithWinds : IFlyBehavior
    {
        public void fly()
        {
            Console.WriteLine("I'm flying!\n");
        }
    }
    public class FlyNoWay : IFlyBehavior
    {
        public void fly()
        {
            Console.WriteLine("I can't flying!\n");
        }
    }

    interface IQuackBehavior
    {
        void quack();
    }

    public class Quack : IQuackBehavior
    {
        public void quack()
        {
            Console.WriteLine("Quack!\n");
        }
    }
    public class MuteQuack : IQuackBehavior
    {
        public void quack()
        {
            Console.WriteLine("<< Silence >>\n");
        }
    }
    public class Squeak : IQuackBehavior
    {
        public void quack()
        {
            Console.WriteLine("Squeak!\n");
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/682223.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Tableau案例】神奇宝贝属性及实力强弱|数据可视化

提前声明&#xff1a;神奇宝贝的数据分析仅供参考&#xff0c;不涉及对于神奇宝贝的各种评价&#xff0c;另外我是初学tableau&#xff0c;涉及到使用的tableau操作可能很简单&#xff0c;复杂的还掌握不熟练&#xff0c;之后会拿时间系统学习tabelau。 数据预处理 该数据集有…

电容笔和触控笔哪个好用?推荐平价好用的电容笔

实际上&#xff0c;电容笔和触控笔这两款笔最大的区别&#xff0c;就在于它的应用范围&#xff0c;一个是适用电容型屏幕&#xff0c;一个是适用电阻型屏幕。如果你想要一个与IPAD相匹配的电容笔&#xff0c;苹果的Pencil将会是一个很好的选择。实际上&#xff0c;平替的电容笔…

Java-API简析_java.lang.Throwable类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131367906 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

成都爱尔林江院长解析看懂验光单,掌握配镜“秘密”

想要更了解自己的“数据”&#xff0c; 想知道自己近视有没有增长&#xff0c; 该如何知道自己的度数呢&#xff1f; 到医院进行验光&#xff0c; 验光后得到的验光单&#xff0c;自己有仔细看过吗&#xff1f; 一串字母与数字&#xff0c;知道都代表着什么吗&#xff1f;…

警惕度量指标陷阱

本文首发于个人网站「BY林子」&#xff0c;转载请参考版权声明。 近日&#xff0c;某群有人发了领导制定的绩效考核指标&#xff1a; 对测试人员的工作成效进行考核&#xff0c;指标是发现的 Bug 的情况&#xff0c;甚至有参考指标细到每个小时要求发现多少 Bug&#xff0c;同时…

VUE L ClassStyle ⑦

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs C l a s s Class Class与 S t y l e Style Style绑定总结 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持…

scratch绘制正方形 少儿编程 电子学会图形化编程scratch编程等级考试二级真题和答案解析2023年5月

目录 scratch绘制正方形 一、题目要求 1、准备工作 2、功能实现 二、案例分析</

动态规划之下降路径最小和

1. 题目分析 题目链接选自力扣 : 下降路径最小和 如果光看这个题目说明的话, 是有点抽象的. 我们结合实例 1 来看 : 总的来说就是, 起始点是第一行中的任意一点, 每个点只有三个方向可以走即向下, 左下, 右下. 当到达最后一行的任意一点即算作到达终点. 期间不同的路径上不同…

mysql单机安装

准备工作 检测项 检测命令 标配值 服务器内存 free -m 32G 硬盘 df -h 1T seLinux getenforce Disabled&#xff08;disabled指关闭&#xff0c;Enforcing指开启 文件描述符大小 ulimit -n 65535 其他优化 Other Other 清理环境 卸载服务器自带…

佩戴比较舒适的蓝牙耳机有哪些?长久佩戴舒适的蓝牙耳机推荐

​听歌、刷剧、游戏&#xff0c;运动、吃饭、睡觉等&#xff0c;要说现在年轻人除了离不开手机之外&#xff0c;还有就是蓝牙耳机了&#xff01;当然&#xff0c;随着蓝牙耳机的快速发展&#xff0c;各种各样的蓝牙耳机都有&#xff0c;导致很多人不知道耳机怎么选了&#xff0…

四大因素解析:常规阻抗控制为什么只能是10%?

随着高速信号传输&#xff0c;对高速PCB设计提出了更高的要求&#xff0c;阻抗控制是高速PCB设计常规设计&#xff0c;PCB加工十几道工序会存在加工误差&#xff0c;当前常规板厂阻抗控制都是在10%的误差。理论上&#xff0c;这个数值是越小越好&#xff0c;为什么是10%&#x…

Git进阶系列 | 7. Git中的Cherry-pick提交

Git是最流行的代码版本控制系统&#xff0c;这一系列文章介绍了一些Git的高阶使用方式&#xff0c;从而帮助我们可以更好的利用Git的能力。本系列一共8篇文章&#xff0c;这是第7篇。原文&#xff1a;Cherry-Picking Commits in Git[1] 在本系列的第5部分中&#xff0c;讨论了r…

Facebook如何与品牌合作,提升用户体验?

Facebook是全球最大的社交媒体平台之一&#xff0c;每天有数亿用户在上面发布内容、互动交流。对于品牌来说&#xff0c;与Facebook合作可以帮助它们扩大影响力、吸引更多潜在客户。 但是&#xff0c;与Facebook合作不仅仅是在平台上发布广告&#xff0c;还需要更深入的合作来…

Ramnit病毒分析

概述 Ramnit病毒是一个相对古老的病毒&#xff0c;使用会感染系统内的exe和html文件&#xff0c;通过文件分发和U盘传播。 样本的基本信息 Verified: Unsigned Link date: 19:02 2008/2/12 Company: SOFTWIN S.R.L. Description: BitDefender Management Console MachineTyp…

王道操作系统学习笔记(3)——内存管理

前言 本文介绍了操作系统中的内存管理&#xff0c;文章中的内容来自B站王道考研操作系统课程&#xff0c;想要完整学习的可以到B站官方看完整版。 3.1.1&#xff1a;内存基本知识&#xff08;指令工作原理、编译、链接、逻辑地址到物理地址的转换&#xff09; 内存可存放数据…

【yocto1】利用yocto工具构建嵌入式Linux系统

文章目录 1.获取Yocto软件源码2.初始化Yocto构建目录2.1 imx-setup-release.sh脚本运行2.2 imx-setup-release.sh脚本解析2.2.1 setup-environment脚本解析 3.构建嵌入式Linux系统3.1 BitBake构建系统3.2 BitBake构建系统过程简要解析3.2.1 解析Metadata基本配置Metadatarecipe…

HTML+CSS面试题总结(附答案+视频讲解)

HTMLCSS面试题总结如下 红色标注为常见重点 对应的视频讲解在B站&#xff1a;可以点击免费观看 2023前端高频面试题详解/面试必刷HTMLCSS前端面试题_哔哩哔哩_bilibili 目录 1. 块元素和行内元素有哪些 2. css3选择器 &#xff08;了解&#xff09; 3. css优先级 4. 对we…

java 艺考报名系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目

一、源码特点 JSP 艺考报名系统 是一套完善的系统源码&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;以及相应配套的设计文档&#xff0c;系统主要采用B/S模式开发。 研究的基本内容是基于Web的艺考报名系统&…

mdk下栈地址相关的知识梳理

mdk中&#xff0c;堆栈地址范围不像在gcc工程中那么容易看出来。过程被mdk隐藏了&#xff0c;单纯从代码层面不好看出来。但是基本的流程是这样的&#xff1a;先确定代码其他部分使用RAM的情况&#xff0c;然后紧跟着已使用的RAM地址&#xff0c;在剩下的RAM地址中分配Stack_Si…

电商数据分析方案和BI强强联合,一站式做分析

搭建一个电商大数据分析平台需要哪些条件&#xff1f;总的来说需要一套满足电商数据分析需求的方案&#xff0c;一个能够提供强大数据计算分析功能和数据可视化图表的平台&#xff0c;比如电商数据分析方案和奥威BI软件这样的组合。 电商数据分析方案BI软件&#xff0c;一站式…