面向对象概念解析

面向对象编程核心概念解析 本文探讨了编程语言中类与对象的核心概念,包括类、子类、超类、实例变量、方法及构造函数等。同时分析了Smalltalk和Scala为何不支持多继承,并通过图书馆管理系统示例说明如何将现实系统分解为对象并定义其方法。 阅读详情

  1. 软件开发过程中的视角

    1.1 概念视角:这种视角“呈现了所研究领域中的各种概念。。。得出概念模型时应该很少或者不考虑实现他的软件。。。”。该视角要回答的问题是:“软件要负责什么?”

    1.2 规约视角:“现在我们要考虑的是软件,但我们关注的是软件的接口,而不是实现。”该视角回答的问题是:“怎么使用软件?”

    1.3 实现视角:这时我们考虑的是代码本身。“这可能是最常用的视角,但在许多方面,采取规约视角经常会跟更好。”该视角会的问题是“软件怎么履行自己的责任?”

 

2. 对象:传统看法与新看法

    传统上对象被视为具有属性、方法的数据体。“开始时描述问题领域中的状态数据,然后添加处理数据的方法(必要的行为所需要的),瞧,对象就有了”这是种太简单,太肤浅的定义。这其实只是从实现的视角来看待对象而已。

    更有意义的定义应该是从概念视角出发——对象是“具有责任的一个实体”。这些责任定义了对象的行为。有时候还将对象视为具有特定行为的实体。这样定义有助我们关注对象的意图行为,而不是对象实现。这种理解能够以两步构建软件:

    1) 先做出一个初步的设计,不用操心所有的相关细节。

    2) 实现设计。

    这种方式我们只需关注对象的公开行为接口。不需要知道对象内是怎样运作以及怎样处理我传递给他的信息等其他内部流程。

    用视角来观察对象:

    1) 概念层次上,对象是一组责任。

    2) 规约层次上,对象是一组可以被其他对象或对象自己调用的方法(也称行为)。

    3) 实现层次上,对象是代码和数据,以及他们之间的计算交互。

 

    如何寻找问题域中的对象呢?在面向对象方法中,设计人员应该了解问题域,找到其中的名词,然后创建对象来表示这些名词,这些几乎是天经地义的。接下来设计人员寻找与这些名词相关的动词(也就是它们的操作),并通过在对象中添加方法来实现这些动词。这种以名词和动词为中心的过程通常会生成超出我们意愿的庞大类层次。我认为,在创建对象时使用共性和可变性味主要工具,要优于仅仅关注名词和动词。

 

3. 封装:传统看法与新看法

    传统上封装被视为数据的隐藏,而封装更应该被视为“任何形式的隐藏”。换句话说,可以隐藏数据,还可以隐藏以下东西:

    实现细节

    派生类

    设计实现

    实例化规则

 

将其定义扩展后,可以 用封装来创建对象之间的层——这样我就可以对位于层一侧的东西进行修改,而不会对另外一侧造成不良影响。

    类型封装是通过多态使用具有派生类的抽象类(或者具有多个实现的接口)实现的。使用抽象类的客户代码无需知道派生类的实际类型

    发现变化并将其封装,最好将变化封装在一个抽象类“之后”。

    许多开发人员都持有一种偏见是:他们往往认为“一个包含了另外一个对象的对象”本质上与“一个具有存数据成员的对象”完全不同。但是那些看似不是对象的数据成员(例如:整型数和双精度数)实际上都是对象。在真正的面向对象语言中,万事万物皆为对象,甚至内置数据类型也就是对象。

    用对象的属性包含变化,和利用对象的行为包换变化其实非常相似。例如:一个系统需要销售数据,收据有合计一项。开始用double类型表示,但是,需求变化程序在世界各地使用,很快意识到需要解决货币兑换,因此需要创建一个Money类,用来包含数量和货币类。现在总计变成一个Money类型了。

 

4. 共性和可变性分析与抽象类

    共性分析就是寻找一些共同的要素,它们能够帮我们理解系列成员的共同之处。也就是在问题领域中找到系列成员的不同变化,找到变化点就是“共性分析”。如果变化就是“变性分析”例如展示一只铅笔、一只园珠笔和一只毛笔,共同点他们是“书写工具”。你所做的识别其共同点的过程就是”共性分析“。三只笔做为书写工具有何差异就是“变性分析”。

    可变性分析揭示了系列成员之间的不同。可变性只有在给定了共性之后才有意义。

 

5. 面向对象概念之间的关系

 

下表表示共性和可变性分析、3层视角、 抽象类及其接口和抽象类的派生类之间的关系

共性分析概念视角抽象类/接口
共性分析、可变性分析规约视角抽象类/接口、派生类
可变性分析实现视角派生类

 

从表中可以看到,共性分析与问题领域的概念视角是相互关联的,而可变性分析与实现视角是相互关联的。规约视角位于其中,共性和可变性都要涉及这个视角。规约描述了如何与一组概念上相似的对象通信。这些对象每一个都代表了公共概念的一种变化。在实现层次上这个规约将抽象为抽象类或接口。

 

下表与抽象类对应的关系

抽象类与核心概念抽象类代表了将所有的派生类联系起来的核心概念。正是这个核心概念定义了派生类的共性
共性与要使用的抽象类共性定义了需要使用的抽象类
可变性与抽象的派生类在共性中辨别出的可变性将成为抽象类的派生类
规约与抽象类的接口这些类的接口对应于规约层次

 

    规约视角和概念视角之间的关系在于:规约标识了用来处理此概念所有情况(即概念视角所定义的共性)所需的接口。

    规约视角和实现视角之间的关系在于:对于给定的规约,怎样实现这个特定情况(这个变化)?

77、深入解析面向对象数据建模的关键概念 本文深入解析了面向对象数据建模中的关键概念,包括关联类、派生元素、泛化、多态性、继承和覆盖。通过详细的定义、表示规则和实际应用案例,文章阐述了这些概念在构建准确高效数据模型中的重要作用。同时,还讨论了如何利用这些概念提升代码的可扩展性、复用性以及减少数据冗余,适合从事面向对象软件开发的人员深入学习和实践。 阅读详情

相关推荐

27、面向对象设计中的关键概念解析

本博客深入解析了面向对象设计中的关键概念,包括封装与信息隐藏、抽象、组合、继承、多态性等,并探讨了组合与继承的适用场景与优劣。同时结合设计原则如单一职责、开闭原则、里氏替换原则等,通过实际案例(如国际象棋游戏和图书馆管理系统)展示了如何在实际项目中应用这些概念。旨在帮助开发者构建可维护、可扩展、高内聚低耦合的软件系统。

sre5engineer的博客 45

对象到底是什么,我们可以从两次层次来理解。

对象到底是什么,我们可以从两次层次来理解。 (1) 对象是具体事物的抽象。 一本书、一辆汽车、一个人都可以是对象,当实物被抽象成对象,实物之间的关系就变成了对象之间的关系,从而就可以模拟现实情况,针对对象进行编程。 (2)对象是无序键值对的集合,其属性可以包含基本值、对象或者函数 每个对象都是基于一个引用类型创建的,这些类型可以是系统内置的原生类型,也可以是开发人员自定义的类型。 什么是...

courageFei的博客 622

34、面向对象编程基础概念解析

本文深入解析了面向对象编程的基础概念,包括类与对象的定义、封装、子类型关系、方法重写、多态性等核心内容。通过具体代码示例和图表,详细阐述了不同编程语言中面向对象特性的实现方式,以及其在代码复用、可维护性和灵活性中的重要作用。此外,还探讨了无类型语言中的子类型概念及其应用场景,为读者全面掌握面向对象编程提供了理论支持和实践指导。

wdx0123456的博客 60

面向对象分析

面向对象概述 1、什么是面向对象? what 2、为什么要使用面向对象?why 3、哪里使用面向对象?where 4、怎么认知面向对象?how

大人的博客 2298

49、面向对象编程中的继承与相关概念深入解析

本文深入解析了面向对象编程中的核心概念,包括抽象方法、继承、接口、密封类等,并通过详细的复习问题帮助理解这些概念。文章还提供了多个实践项目,如游戏类、订单类、书籍类和几何图形类的设计与实现,同时讨论了实际应用场景及未来发展趋势。适合初学者和进阶开发者学习和巩固面向对象编程的核心知识。

4k5l6j7h8的博客 53

22、Java编程:数组与面向对象概念全解析

本博客深入解析了Java编程中的核心概念,包括数组的使用与错误处理、面向对象编程的基本特征以及类和对象的区别。通过多个代码示例,详细讲解了如何操作数组并避免常见异常,同时介绍了面向对象的核心思想,如封装、委托、单一职责原则等。此外,还涵盖了类的创建、对象实例化、getter/setter方法、构造函数、this关键字和static关键字的应用,为Java初学者提供了全面的基础知识体系。

lemon的博客 107

面向对象的基本概念

http://www.cnitpm.com/pm/8539.html 面向对象的基本概念有对象、类、抽象、封装、继承、多态、接口、消息、组件、模式和复用等。 1.对象 对象是由数据及其操作所构成的封装体,是系统中用来描述客观事物的一个封装,是构成系统的基本单位,采用计算机语言描述,对象是由一组属性和对这组属性进行操作的一组服务构成。 对象包含三个基本要素,分别是对象标识

yuanfang_jlht的博客 1092

C++编程基础与面向对象概念解析

本文旨在深入探讨C++编程语言的核心概念,包括面向对象编程的原则、基本语法、函数、类与对象、构造函数与析构函数、运算符重载和类型转换、继承、多态性、指针操作、异常处理以及标准模板库(STL)等。通过对这些主题的详细解析,读者将能更好地理解C++的强大功能以及如何有效地在软件开发中应用这些概念。

weixin_30820933的博客 775

面向对象分析、面向对象设计、面向对象编程、面向对象编程语言的基本概念

什么是面向对象编程和面向对象编程语言? 面向对象编程的英文缩写是 OOP,全称是 Object Oriented Programming 面向对象编程语言的英文缩写是 OOPL,全称是 Object Oriented Programming Language 面向对象编程 面向对象编程是一种编程范式或编程风格。它以类和对象最为组织代码的基本单元,并将封装、抽象、继承、多态四个特性作为代码设计和实现...

Angus的博客 1966

C++面向对象编程概念全面解析

本文深入探讨了C++面向对象编程中的核心概念,包括类的不同成员访问权限、继承与多态的实现、以及C++中特殊的构造函数与析构函数用法。同时,文章还涉及了C++编程中的异常处理、内存管理等高级特性,并通过实际问题讨论这些概念的应用,帮助读者更深刻地理解并运用C++语言。

weixin_32312889的博客 355

面向对象的基本概念、面向对象分析、特征

共同学习,上传个东西这么麻烦 共同学习,上传个东西这么麻烦 共同学习,上传个东西这么麻烦 共同学习,上传个东西这么麻烦

阿里开发手册之面向对象规约(序列化原理待完善)

避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可 所有的覆写方法,必须加@override注解 相同参数类型,相同业务含义,才可以使用java的可变参数,避免使用object 接口过时必须加@Depercated注解,并清晰地说明采用的新接口或者新服务是什么 不能使用过时的类或方法 所有相同类型的包装类对象之间值得比较,全部使用equal...

gk 858

从零开始学DAG:用dagitty软件快速构建因果图的5个步骤

本文为初学者提供了使用dagitty软件快速构建因果图的5个实用步骤。通过一个公共卫生研究实例,详细演示了如何从定义核心变量开始,逐步引入混杂、中介和碰撞变量,最终利用dagitty的自动分析功能识别最小充分调整集,从而科学指导研究设计与统计分析,有效提升因果推断的严谨性。

ii567的博客 800

面向对象编程中常见概念深入解析

yj71248的博客 284

STM32G474+Simulink+HIL硬件在环仿真

硬件:STM32G474RET6(官方的NUCLEO板)软件:STM32Cube_FW_G4 V1.6.1芯片包;KeilMATLAB 2023B(本文已成功)STM32嵌入式支持包。

qq_44701116的博客 1780

CentOS7无外网环境下MySQL8.0完整离线部署指南

本文详细介绍了在CentOS7无外网环境下,如何通过MySQL8.0二进制包进行完整离线部署。指南涵盖了从环境准备、依赖安装、用户与目录创建,到数据库初始化、服务配置及远程访问设置的全过程,并提供了关键的避坑技巧,帮助企业运维人员在内网环境中高效、稳定地搭建MySQL数据库服务。

xxx12的博客 1029

面向对象编程中常见概念解析

面向对象常见概念深入解析 请看下图 OK,就一张图 怎么样,是不是通俗易懂 嘿嘿嘿 代码千万条,工整第一条。 编程不规范,同事两行泪。

苟冬新 840

HyperMesh二次开发实战:自动化Comp与材料属性批量绑定

本文详细介绍了HyperMesh二次开发中自动化Comp与材料属性批量绑定的实战技巧。通过TCL脚本实现批量创建属性卡、智能材料分配和异常处理,大幅提升前处理效率,适用于汽车、航空航天等领域的复杂模型处理。

weixin_29214691的博客 691

Java面向对象编程的基础概念解析

面向对象编程(Object-Oriented Programming,简称OOP)是一种常用的编程范式,Java作为一门面向对象的编程语言,深受程序员喜爱。本文将详细解析Java面向对象编程的基础概念,包括类和对象、封装、继承和多态等方面,旨在帮助读者理解和应用Java的面向对象编程思想。类和对象在Java中,类是用来描述相同属性和行为的对象集合。它是面向对象编程的基本概念之一。类用于定义对象的属性和方法,是创建对象的模板。而对象则是类的具体实例,拥有特定的属性和行为。封装封装是面向对象编程的重要原则。

weixin_46508088的博客 487

手把手教你用Ubuntu Desktop搭建个人L2TP服务器,手机电脑都能连(Network Manager配置详解)

本文详细介绍了在Ubuntu Desktop上使用Network Manager图形化配置L2TP服务器的方法,实现手机、电脑等多设备安全连接。从环境准备、图形界面设置到各平台客户端配置,提供一站式解决方案,并包含常见问题排查与安全增强措施,帮助用户快速搭建个人远程访问网络。

weixin_30555125的博客 119

创意视觉项目实战:用ESP32-S3+OV5640构建智能图像流系统

本文详细介绍了如何使用ESP32-S3开发板与OV5640摄像头模块构建智能图像流系统。从硬件连接到软件配置,涵盖Arduino环境搭建、图像采集优化、WiFi视频流传输及外设集成,为开发者提供完整的实战指南,助力智能家居和机器人视觉项目开发。

tech5的博客 1292

一图看懂JavaScript面向对象:9大核心概念代码全解析

面向对象宇宙├─ 构造工厂(构造函数)├─ 基因库(原型)├─ 族谱树(原型链)├─ 保险箱(封装)├─ 家族企业(继承)├─ 混血技能(Mixin)├─ 临时VIP(包装对象)├─ 变脸演员(this指向)└─ 方向锁定(this绑定)理解这些概念后,再看JavaScript的面向对象实现,就像破解了乐高积木的拼接密码。每个概念都是构建复杂系统的标准化零件,灵活组合即可创造出无限可能。```

qq_50708187的博客 901

ProgLoss+STAL 技术详解:YOLO26 小目标检测增强方案

本文提出了一种基于ProgLoss渐进式损失函数和STAL小目标感知标签分配的YOLO26增强方案。针对小目标检测中特征信息少、正负样本不平衡等难题,STAL通过尺度感知的标签分配策略动态调整候选样本数量和IoU阈值,为小目标分配更多正样本;ProgLoss则根据训练阶段动态调整分类和回归损失的权重,早期侧重定位能力,后期加强分类精度。实验表明,该组合方案显著提升了小目标检测性能,在COCO数据集上小目标AP达到38.2%,比基线提升6.5个百分点。该方法为遥感、监控等场景的小目标检测提供了有效解决方案。

一键难忘的博客 1285

Java 面向对象进阶之多态:从概念到实践的深度解析

多态作为 Java 面向对象编程的重要特性,通过继承、方法重写和父类引用指向子类对象,实现了同一操作在不同对象上的多样化行为。它在提高代码的可维护性、扩展性,实现插件式架构以及简化代码逻辑等方面都发挥着重要作用。然而,在使用多态时,也需要注意访问权限、静态方法和构造方法等相关问题,避免出现错误。深入理解和熟练掌握多态,将有助于我们编写出更加健壮、灵活和高效的 Java 程序。希望本文的内容能够帮助大家更好地掌握 Java 面向对象进阶中的多态知识,并在实际开发中灵活运用。关问题,避免出现错误。

爱因斯晨的博客 2067

Redhawk:什么是timing window?

STA timing file中timing window的作用和计算方式

m0_61544122的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 为了责任创业
下一篇: Facade 模式和Adapter 模式的比较
2000killer
博客等级 码龄23年 5粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值