面向对象设计之一 封装与共生性

37、面向对象系统设计:从模型平衡到类与方法设计 本文详细介绍了面向对象系统设计的关键步骤,包括模型平衡、设计策略选择以及类与方法的设计。文章探讨了功能、结构和行为模型的一致性验证,分析了定制开发、使用打包软件和外包等策略的适用场景,并深入讲解了类与方法设计的原则、评估指标及多态与动态绑定的应用。通过流程图和代码示例,帮助读者更好地理解系统设计的全过程,最后展望了未来技术趋势对系统设计的影响。 阅读详情

1 封装


       没有经过封装的原始代码规定为0级封装,而面向过程的子程序可以称为一级封装。而类则封装了众多的子程序,集合在一起形成一个高级别的封装,因此类是二级封装。组合类的包,则可以称为三级封装,而构件则可以看作更四级封装。


2 共生性


在两个元素A和B之间,共生性意味着:

1 如果在A中进行了一些变化,那么为了保持全面的正确性,同样需要对B进行改变,或者至少要仔细进行校验。

2 或者为了保持正确性,需要在A和B中同时进行一些变化


2.1 共生的性质


为了实现共生性,两个元素A和B之间不能相互通信

一些共生性的形式具有方向性,例如名称共生性,存在着单向的共生,也存在着双向的共生

一些形式的共生性是没有方向的,如果A和B之间没有显式的引用。如A和B使用的运算过程。


2.2 共生性的种类


类型共生

A:   int i;

B:   i=7

如果A处i声明为char,则B处自然需要变化

名称共生

上例中,如果A处声明变为j,则B处也需要进行变化。在派生类中如果使用了基类的某个名称,如果基类发生变化,则派生类也需要变化。

显式共生

像上面这两个例子,共生是显而易见的,通过阅读程序就可以快速找到。

隐式共生

然而,有时共生性的显现却并不是那么明显,需要花费大量的时间和精力去检测它,除非在显著的位置具有详细的文档说明。下面举一个隐式共生的例子,在古老的汇编语言中,我们经常可以看到的一种位置共生性。由于代码位置而存在的共生性。

A:  jump Y+38

B:  clear R1

…//38字节代码

clear R2

位置共生性

比如A和B的必须以一定顺序、必须相邻,比如形参与实参的对应。

常量共生

当在系统中使用一个常量来定义一个属性时,这个变量和常量便发生了共生

算法共生性

比如hash表中的插入和查找使用了相同的hash算法

上面的大部分共生性都是静态共生性,这些共生性是体现在静态的代码中。而动态共生性,则依赖于运行代码的执行模式或对象的交互模式。下面列出一些动态共生的类型。

执行共生性

执行共生性是位置共生性的动态表现形式。它有几种类型,包括顺序和相邻。

时间约束共生性

实现系统中经常出现,为了完成某个操作,而此操作必须在规定时限内完成。

数值共生性

存在一些约束,在数值之间存在着协变性。比如三角形的三条边的数值。

标识共生性

id共生性,两个指针指向同一个内存,当一个指针修改了内存的内容后,另一个指针指向的内容也发生了变化。

差异共生性

为了保证正确性,A和B必须保持不同,这称之为差异共生性。这种共生非常常,比如同一局部的多个变量不能重名。导入不同命名空间存在的命名冲突等都是共生性的体现。在多重继承下,多个基类中的同名操作也是同样的情况。


2.3 共生性和封装边界


封装是对共生性,特别是差异共生性的一种检验。如果系统没有任务封装,在大量代码中,如果改动一个地方,则你需要检查所有的代码以查看是否有共生性需要解决。一个没有封装单元的系统会存在两个问题:共生性泛滥和混淆真正的共生性。

面向对象方法至少可以驯服在传统模型系统中仅仅处于1级封装的不太好使用的共生性,即基于类的2级封装可以更容易限制共生的存在范围。

为了提高系统的可维护性,共生性提供了三个指导原则:

通过将系统拆分为封装的元素使得整个共生性达到最小化。

将任何超越封装边界的共生性最小化。

在封装边界范围内将共生性最大化

因此任何穿越了封装的边界而发生的共生说明这上封装将不合理,或者违反了面向对象的设计原则。

教学用ATM管理系统设计与实践 在面向对象编程中,类可以被看作是创建对象的模板或蓝图。一个类通常包含数据成员(也称为属性或字段)和成员函数(也称为方法)。数据成员用于存储关于对象状态的信息,而方法则定义了对象的行为。在一些编程语言中,类的定义包括以下部分:类名:用来标识类的名称,必须是一个有效的标识符。属性:用来定义对象状态的变量。方法:定义对象行为的函数。下面是一个简单的类定义示例,以Java语言为例:// 属性// 构造方法// 方法// 省略getter和setter方法。 阅读详情

相关推荐

农业杂草检测——甜菜杂草目标检测数据集

甜菜田中常见的杂草种类繁多,主要有稗草、狗尾草、芦苇、灰藜等。•稗草:一年生草本植物,和稻子外形极为相似。秆直立,光滑无毛。圆锥花序主轴具角棱,粗糙;小穗密集于穗轴的一侧,具极短柄或近无柄。花果期 7 - 10月。生长在稻田里、沼泽、沟渠旁、低洼荒地等。•狗尾草:又叫莠,因穗形像狗尾巴而得名。秆疏丛生,直立或基部膝曲上升。叶片条状披针形,叶鞘松弛,光滑,鞘口有毛;叶舌毛状。圆锥花序呈圆柱状,直立或稍弯垂,刚毛绿色或变紫色。夏、秋采收,晒干。常生长在麦田、谷子、玉米、棉花、豆类、花生、薯类、蔬菜、甜菜、马铃薯

qq_38220914的博客 1139

第三章_Java中方法(封装)的基本概念和使用

第三章_Java中方法(封装)的基本概念和使用 1.方法的概念 ​ 方法是一个独立的可执行的单元。方法在一些语言中被称为函数,是对于一些重复使用的具有复杂逻辑的代码的封装,给被封装的代码起一个名字,并且可以随时通过这个名字调用被封装的代码。 为什么要定义方法? ​ 假如有三个学生的成绩,需要计算他们每个人的总分。那么三个人的成绩我们就需要做重复的工作做三次,而方法的定义就是为了简化我们计算的过程,我们可以通过调用方法直接获取他们的总分,从而简化了一系列重复而又繁琐的工作。 eg: 姓名 语文 数学

ZzzzzzSJ的博客 2898

LTE随机接入实战:如何通过PRACH前导码优化小区覆盖半径(附计算公式)

本文深入探讨了LTE网络中PRACH前导码格式对小区覆盖半径的关键影响。通过解析不同前导码格式(如Format 0-3)的物理参数与覆盖能力,提供了核心计算公式与实战Python脚本,指导网络工程师根据覆盖需求、环境多径和容量等因素,科学选择前导码格式以优化边缘用户接入成功率,实现精准的网络规划与优化。

qq_27496129的博客 573

方法封装经验

在开发业务逻辑时,当遇到复杂的业务场景时,设计模式可以解决一定问题,但是具体的方法封装还是需要编码来解决,在我看到的场景里,很多人使用了设计模式之后,导致整个代码更加难以维护,代码可读性变得更差,因为他们都是为了练手而使用设计模式,并不是出于这里的确需要一个设计的目的。 方法封装 方法多了以后,会变得混乱不堪,解决的方法有一下几点: 1、将方法的上下层次结构整理清楚,尽量不要形成网状调用关系,要线性关系。 2、方法的入参设计直接决定了方法可复用的程度,进而决定整个调用关系复杂程度,对外接口入参,和内部方

诗人不写诗 585

RTKlib操作手册--使用样例数据演示

本文将使用样例数据演示如何使用RTKLIB进行rtk差分定位。

samur2的博客 7774

海思ISP实战:YUV Sharpen参数调试全解析

本文深入解析了在海思ISP平台上进行YUV Sharpen参数调试的实战经验。文章以海思3516EV300芯片为例,详细拆解了EdgeFiltStr、TextureFreq等核心参数的作用与协同策略,并重点阐述了如何通过ISO联动调试,在图像清晰度与噪声抑制之间取得最佳平衡,为图像调试工程师提供了宝贵的避坑指南和实战参考。

grape的博客 209

方法封装

目标 1. 深入理解方法封装的思想 2. 能够使用方法封装的思想对代码进行优化 1. 方法封装 方法封装:是将一些有共性的或多次被使用的代码提取到一个方法中,供其他地方调用。封装的好处: 避免代码冗余容易维护 隐藏代码实现的细节 目的:用最少的代码实现最多的功能 2.V3版本 使用方法封装的思想,对代码进行优化。 定义获取驱动对象的工具类封装“获取弹出框的提示消息” ...

qq_40208605的博客 1135

论文阅读:arxiv 2023 EduChat: A Large-Scale Language Model-based Chatbot System for Intelligent Education

EduChat是一个基于大规模语言模型(LLM)的教育领域聊天机器人系统,旨在为教师、学生和家长提供个性化、公平且富有同理心的智能教育服务。该系统通过在教育语料库上进行预训练和特定任务微调,强化了开放式问答、作文评估、苏格拉底式教学和情感支持等教育功能。为解决领域知识不足和知识更新问题,EduChat采用了检索增强技术,并融入心理学和教育学理论。该项目已开源,提供代码、数据和模型参数,推动LLM在智能教育中的应用发展。

CSPhD-winston的博客 1039

软件架构师 第一部分 基础篇 第二章 模块化

什么是模块化? 定义:可用于构建更复杂结构的一组标准化零件或独立单元中的一个 我们使用模块化来描述代码的逻辑分组,该分组可以是面向对象语言中的一组类,也可以是结构化语言和函数式语言。 大多数语言都提供了模块化的机制(Java中的包,.NET中的命名空间,等等)。开发人员通常使用模块作为相关代码分组在一起的一种方式。 度量模块化的标准 内聚性 内聚性是指模块中各部分的关联程度。一个内聚的模块会将所有部分包装在一起,因为若将他们分成更小的部分,就需要通过通过模块之间的调用才能将其耦合在一起。 ——

zy_小轩的博客 1478

【基于Arduino 的CNC笔式绘图仪】

该机器的结构基于我之前视频中的DIY CNC激光雕刻机,目标是以尽可能少的零件制造最简单的CNC机器。它使用 3 个 NEMA 17 步进电机进行 X、Y 和 Z 轴运动,并使用一个小伺服器进行夹持器。这款数控笔式绘图仪的大脑是一块Arduino UNO板,结合了一个数控屏蔽和三个A4988步进驱动器。在我看来,相当大的工作区域,360x280mm,以及这款笔式绘图仪可以输出的细节水平也令人印象深刻。我真的很惊讶这些图纸的好坏和精确程度,尤其是我使用0.6毫米中性笔的图纸。

vor234的博客 1497

PD详解 扩展消息——Source_Capabilities_Extended Message

PD的协议层分为控制消息,数据消息还有扩展消息,今天大师匈讲一下扩展消息中的source_cap_extended。这个消息在扩展消息中算是比较关键的东西。 扩展消息中的source_cap_extended 大师匈先上图,然后逐一解释; 上面的图表说了source_cap_ext中包含了哪些内容。 我们注意到在source_cap扩展消息中是以字节为单位的,并不是像source_cap中以一个object为单位,当然有注意到PD标准spec中说明的扩展消息的话,那里有说明,在header之后的字节

大师匈的博客 3516

封装与共生性

封装与共生性1.封装的级别:a.原始代码行:0级封装;b:程序快:1级封装;c:类和对象结构:2级封装;d:包:3级封装.e:部件:4级封装.书中涉及的就这5种封装结构,但不难想象,接下来的封装结构会延续这一特点,也即抽象程度会越来越高,设计的难度也越来越大(设为N级封,则在设计时一方面要考虑该级别的“对象”结构及其交互,同时还要考虑N-1及以下级别的设计要求,包括接口,交互等等)。2.类的设计要

graceswq111的专栏 1034

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

理解面向过程和面向对象的程序设计方法

一、结构化程序设计 1,概念: 传统的结构化程序设计思想的核心是功能的分解。将问题分解为多个功能模块,根据模块功能来设计用于存储数据的数据结构,最后编写了过程(函数)对数据进行操作实现模块的功能。程序由一系列处理数据的过程(函数)组成。这种设计方法的重点是面向过程的,也称为面向过程的程序设计方法。 2,特点: 传统的结构化程序设计思想可归结为: “程序=数据结构+算法” 数据结构用于量化描述要...

qq_43660987的博客 5064

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

面向对象五大设计原则

1.单一职责原则(Single-Resposibility Principle) "对一个类而言,应该仅有一个引起它变化的原因。"声明一个对象/类应该只有一个职责。本原则是我们非常熟悉地"高内聚性原则"的引申,但是通过将"职责"极具创意地定义为"变化的原因",使得本原则极具操作性,尽显大师风范。同时,本原则还揭示了内聚性和耦合生,基本途径就是提高内聚性;如果一个类承担的职责过多,那么这些职责就会...

WWX2LN的博客 543

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

类与对象

###知识点 面向对象的基本思想 类和对象的基本概念 C++中的类及其定义 关于类和对象 面向对象基本思想 面向对象程序设计(OOP)最重要的核心特性之一是将整个程序分为若干个小的实体,称为对象,他们具体明确定义的交互作用,优点是显著减小了整体的复杂性 封装:代码的分而治之,数据与代码分而治之 把数据和相关操作装到一个“黑匣子”——对象 向外界隐藏了内部的数据结构,表达式和过程 对外展示,非具体操作 抽象:只呈现数据的行为,而隐藏数据的细节 C++语言的类结构支持数据抽象和数据封装 ###C+

Mr_Csyn的博客 141

面向对象的设计

对象是什么?概念层面:对象是拥有某种责任的抽象规格层面:对象是一系列可被其它对象使用的公共接口实现层面:对象封装了代码和数据   -----------------------------------------类设计指导性原则:-----------------------------------------1. 针对接口编写,而不是针对实现编程   客户无需

phoenix_17th的专栏 435

C++中的面向对象(四大基本特征与五大原则)

面向对象的基本特点包括:抽象、封装、继承、多态。 1、抽象: 指对同一类对象的共同属性和行为进行概括,而暂时不解释部分细节,形成类或接口。 抽象包括两方面:数据抽象和过程抽象。 .数据抽象:描述某类对象的属性或状态(类的属性) 过程(代码)抽象 :描述某类对象的共有的行为特征或具有的功能(类的方法) 抽象的实现:类 2、封装: 指将抽象出的数据、代码封装在一起,形成类。 目的:增强安全性和简化编程,使用者不必了解具体的实现细节,而值需要通过外部接口,以特定的访问权限,来使用类的成员 3、继承: 指在已有类的

Vergesson 2589

<2014 04 15> C++语言回顾精要(原创By Andrew)

C++语言回顾精要 《Visual C++程序设计》张岳新,这本书是很多学校的本科生C++教学用书,今天重新拿来翻了一遍。跟很多国人写的技术书籍一样,写书并不是为了让初学者看懂入门,而是为已经掌握了该知识的人罗列一遍。 这本书分为两部分:Visual C++基础&面向对象的程序设计。可以说前半本第一部分就是C语言,因为C++是C的一个超集,其对C的延伸表现为实现面...

dizhuang5374的博客 178

计算机毕业设计PHP大学生性教育新闻文章论坛网站vue

PHP是“超文本预处理器”,是一种通用开源脚本语言。由于PHP是运行在服务器端的脚本,可以运行在LINUX、WINDOWS、Android等平台。免费性:和其它技术相比,PHP本身免费且是开源代码。快捷性:程序开发快,运行快,技术本身学习快。嵌入于HTML:因为PHP可以被嵌入于HTML语言,它相对于其他语言。编辑简单,实用性强,更适合初学者。考虑到数据交互的便捷性,以及业务逻辑的复杂度,采用前后端分离开发,实现项目耦合,性能稳定。建立权限表,细分角色权限。

懒人的博客 703

强化基础-Java-基础回顾

所谓字符,就是单个的字符表示,例如字母a,或者中文张,外面用单引号包围,比如 char a = ‘B’;Java的成员内部类是一个嵌套在另一个类中的类,它可以访问外部类的成员和方法。8)布尔类型: 使用boolean表示,布尔类型只有两种可能,分别为true或false。所谓浮点型,指的是小数,也叫实数,例如:1.2。2)字节型: 使用byte表示(从-128到127之间的256个整数)。1)整型: 使用int表示(32位)。3)短整型: 使用short表示(16位)。对于异常,性能的优化。

qq_43259860的博客 890

C++面向对象的程序设计——继承

首先让我们了解一个面向对象程序设计的4个主要特点:抽象,封装,继承和多态。其中继承性和派生性是面向对象程序设计的两个重要特性。 1.什么是继承:    在C++中继承就是在一个已存在类的基础上建立一个新类,然后新类可以从已有类那里获得它已有的特性。 class Base { public: int a; int b; }; class Derived :public Base { pub

bbwn_的博客 609

C++三大特性,七项原则

1. C++面向对象三大特性 1. 封装 封装:把客观事物抽象为类,并且类可以把自己的数据和方法只让可信的类或对象操作,对不可信的进行信息隐藏。 类将成员变量封装在类的内部,根据需求设置访问权限,通过成员函数管理内部状态。 2. 多态 多态简单讲可以概括为“一种接口,多种方法”,多种形态,程序在运行过 程才决定要调用的函数,是核心概念。 ps:重载,重写,重定义的区别: 重载,同一作用域的同名函数 1.同一个作用域 2.参数个数,参数顺序,参数类型不同 3.和函数返回值,没有关系 4.const也可以作为

qq_43685242的博客 906

用Python面向对象编程构建智能体:OO Agents框架实战指南

面向对象编程(OOP)是软件工程的核心范式,通过封装、继承和多态等概念组织代码,提升可维护性和复用性。在AI应用开发领域,智能体(Agent)作为能够感知环境、自主决策和执行任务的实体,正成为构建复杂AI系统的关键技术。传统智能体框架往往引入较高的学习成本和认知负荷,而NVIDIA实验室开源的OO Agents项目创新性地将OOP范式与智能体架构相结合,允许开发者使用熟悉的类、对象和方法调用来定义智能体的行为、状态与协作。这种设计显著降低了框架的侵入性,使智能体逻辑能够无缝融入现有Python项目,尤其适合

weixin_29800471的博客 280

JAVA从菜鸟【入门】到新手【实习】——JAVA基本知识体系(程序设计方面)

我希望树立一种应用观念,即JAVA是一门计算机语言,描述的是以计算机运算的方式去描述世界刻画规律。 语言不是计算机的全部,它有基础和延伸。 它表现出的数据特性和运算特点都是硬件原生性的。从计算机语言就可以感受到这中思维。 计算机硬件,计算机系统,计算机软件,计算机网络,计算图形+软件工程形成了现代计算机应用基础, 它们是计算机技术的不同层次的基础。

qq_35996868的博客 310
上一篇: Linux on Power 上的调试工具和技术
下一篇: 面向对象设计之二 类的领域、依赖度与内聚类型
zzulp
博客等级 码龄19年 464粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值