Oop 面向对象软件设计原则

我非常喜欢软件设计原则,比如SOLID和DRY。OO软件设计还有哪些其他原则 注意。我不是在寻找“注释你的代码”这样的答案,而是在寻找像所讨论的那些OO设计原则。选择组合而不是继承是其中之一 许多人,尤其是那些刚接触OO的人,在真正需要使用组合的时候,会开始扩展类。真的,如果你问自己,新的B班是a班吗?如果不是,那么你不应该延长 例如,假设我有一个Person类,一个Car类,我想创建一个名为DrivenCar类的新类。一个简单的实现是这样的(让我们假设我们得到了多重继承) 司机是一种人吗?不,

Oop 国家与行为

有时对象由纯数据组成。此类对象具有字段、访问器,实际上没有其他方法 有时对象由纯行为组成。它们具有表示其状态的其他对象,或者数据作为方法参数传递。这些对象通常表示算法或某种策略 你喜欢什么样的状态/行为比率? 什么更易于维护? 什么更容易出错?我喜欢对象(按优先级顺序): 有关于如何使用它们的详细说明,这样您就不会达到无效状态。 调用方法时,如果异常状态不正确,则引发异常 在调用一个方法之前,有一些方法允许您断言它们处于正确的状态 当这些措施到位时,事情就更难搞砸了 没有行为的对象也可以是哈

Oop 如何在UML类图中表示模式的实现?

在UML中,我如何表示一个类实现了某种设计模式或遵循某种约定?例如,在Java中,类是否遵循JavaBean约定?只需在图中添加一个注释,指向实现该模式的部分 或者您可以使用UML中的扩展性系统,称为原型。将添加到实现该模式的所有类中 尽可能地遵循UML规则,但请记住,它是为可扩展而设计的,因此它不应阻止您表达您的想法您可以使用原型f.e。 或者使用注释。你说的是“软件设计模式”,对吗 这些概念在U.M.L.上没有具体的实现。 正如前面的答案一样,他们使用了同样的东西,允许U.M.L.被扩展,刻

Oop 关于面向对象设计的建议

我想要一些关于OOD查询的帮助 假设我有以下Customer类: public class Customer { public int Id { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } 它是客户相关数据的简单占位符。接下来是用于获取客户的CustomerFactory: public static class CustomerFact

Oop 在Smalltalk中获取消息的发件人

在Smalltalk中,是否有一种实用的方法来获取消息的发送者,而无需手动将self作为参数传递 更具体地说:我想给传递给我的类的ID添加一个特定于类的前缀,因此如果ClassA发送(在类端) ClassB应该在内部将“myId”视为“ClassB myId”或类似的东西 我已经用一个额外的参数实现了它,这个参数必须是self ClassB doSomethingWith: 'myId' for: self. 但如果没有这种明确的自我发送,我会非常高兴。您可以使用执行堆栈上的反射功能: thi

Oop Liskov替换原则是否适用于从抽象类继承的子类型?

粗略地说,Liskov替换原则声明可以替换派生类来代替基类,而不会影响用户。 如果基类是抽象类,这意味着没有用户使用基类的实例,那么Liskov继承限制是否仍然适用于派生类 是的,因为调用者总是可以这样做: BaseAbstractClass instance = new DerivedClass(); 不能实例化特定类并不意味着不能使用它。在此场景中,调用代码使用抽象基类作为其操作所依据的契约的定义。从这个意义上说,从基类派生的每个类都应该可以与基类定义的接口进行交换,因此yes Lisko

什么叫OOP';s相当于;参考透明度;?

我的理解是,术语“”实际上只能用于函数代码。但是,在面向对象代码中对对象的方法调用可以具有类似的属性,即方法的返回值和方法调用后对象的状态仅取决于调用前对象的状态以及方法的参数 i、 e.功能参考透明度: i = foo(n, m); // return value depends only on n, m i = obj.foo(n, m); // return value, and subsequent state of obj, depends // only on initial s

Oop 固体vs.雅格尼

我听到的关于不遵守面向对象设计原则的最常见论据之一是(尽管论述者通常不这么称呼它): “我可以将功能X和功能Y放在同一个类中。很简单,为什么要添加一个新类(即复杂性)。” “是的,我可以将我所有的业务逻辑直接放入GUI代码中,这样更简单、更快。这将始终是唯一的GUI,而且不太可能出现重大的新需求。” “如果在不太可能出现的新需求情况下,我的代码变得太混乱,我仍然可以针对新需求进行重构。因此,您的“如果以后需要…”参数不起作用。” 你反对这种做法最有说服力的理由是什么?我如何才能真正证明这是一个昂

Oop 迭代超类型集合时的类型转换。选择?

这是我遇到的一个很常见的问题。让我们听听你的解决方案。我将以员工管理应用程序为例:- 我们有一些实体类,其中一些实现了特定的接口 public interface IEmployee { ... } public interface IRecievesBonus { int Amount { get; } } public class Manager : IEmployee, IRecievesBonus { ... } public class Grunt : IEmployee /* Thi

Oop Cobol错误代码243是什么意思?

我在Micro Focus Cobol Eclipse中运行Cobol程序时出错。我不知道为什么会这样。请帮助我,因为我明天必须把这个作为我重要家庭作业的一部分提交。 另一个问题,如果可能的话,请帮我处理变量,我把它放在本地存储部分。例如,在Java中,我想为每个要访问的方法将其设置为全局 控制文件: Identification Division. Program-Id. Client. Environment Division. Configuration Se

Oop 传递对象而不是将其指定为类的成员是否会产生不利影响

我有一个创建类的习惯,这些类倾向于传递对象来对它们执行操作,而不是将它们分配给成员变量并让操作引用成员变量。对我来说,这比OO更有程序性 这是一种可怕的做法吗?如果是这样的话,有什么不利影响(性能、内存消耗、更容易出错)?是否更容易和更紧密地与封装等OO原则保持一致,以支持成员变量 下面是我的意思的一个人为的例子。我倾向于做以下事情 public class MyObj() { public MyObj() {} public void DoVariousThings(OtherOb

Oop 工人与数据类

我有一个数据类,它封装了相关的数据项。这些数据项由用户在需要时逐个设置和获取 我对设计的困惑在于哪个对象应该负责处理该数据对象的多个属性的更新。有时会执行一次影响多个属性的更新操作 那么,哪个类应该有update()方法呢?。是数据类本身还是另一个管理器类?update()方法需要与许多不同的对象进行数据交换,因此我不想让它成为数据类的成员,因为我认为它应该不知道更新所需的其他对象。我希望数据类只是一个数据结构。我想错了吗?正确的方法是什么 我的代码: class RefData { M

Oop 包含首字母缩略词的类的命名约定

如果我用OOP语言命名一个新类,这是一个更好的约定: XMLWriter 最常见 XMLwriter 容易辨别 XmlWriter 不再是首字母缩略词 XML_编写器 删除驼峰案例的要点 学究式的是,但我很好奇谁使用了什么,为什么使用。Java惯例最近似乎倾向于将著名的首字母缩略词视为单词,所以:“XmlWriter” 我敢肯定,所有不同的命名习惯的人都会因为我说这句话而把我捆起来。但在我看来,您应该使用的命名约定应该是最容易阅读的。名字只供人类使用,因此它们应该是最容易阅读/

Oop CakePHP中使用的设计模式

我的问题:CakePHP中使用的设计模式有哪些好例子? 为什么使用CakePHP作为我的上下文 我已经使用CakePHP大约一年了,所以我认为在这种背景下思考更容易。CakePHP在设计模式使用方面也很丰富(我对此很有信心)——除了几个明显的模式之外,我不知道正在使用什么模式 我一直在阅读的有关该主题的示例书: 我正在读以下几本书,它们都在某种程度上涵盖了设计模式;不幸的是,他们大多使用java和C++代码示例,这使得我难以在实际的水平上掌握设计模式(我是PHP开发者,所以我很难吸收它): “企

Oop 从api调用和模式映射创建实体

我正在决定如何创建从第三方api提取的实体。实体的概念需要两个API调用,其中一个调用提取有关实体的唯一数据,另一个调用为我提供可能属于实体的所有可能数据的完整模式 我已经为实体编写了一个存储库,但是如果我只获取一次,那么架构映射在域层中的位置如何呢? 实体应如何保存此架构数据? 我不熟悉映射器模式,但这似乎是它的正确用例吗?如果您有模式数据,然后是数据,那么您正在处理一个具有动态属性的实体,类似于字典或哈希表,但具有验证 您可以将模式数据视为其自身的实体,它提供了实例化和验证实体的知识级别,实

Oop OCaml中对象中的对象

我正试图找出如何用其他对象参数化OCaml对象。具体来说,我希望能够创建一个链接对象,该对象包含一个向前的节点对象和一个向后的节点对象,我希望能够通过如下方式创建链接: let link1 = new link node_behind node_ahead;; 对象是OCaml中的普通表达式,因此可以将它们作为函数和类构造函数参数传递。有关更深入的解释,请参阅OCaml手册中的 例如,你可以写: class node (name : string) = object method name

Oop 类层次结构术语,祖先类与父类

我试图理解各种定义,其他学生不太同意我的观点 我的定义,如果错误,请更正: 基类是层次结构中最顶层的类 超级类和祖先类,层次结构中更高级别的任何类(包括基类) 父类,层次结构中上一个类。是父类是类的直接超类(层次结构中最多一级)。根据您的编程语言,一个类可以有多个父类 而祖先类是类的任何超类(父类、父类的父类等)。根据定义,基类是另一个类从中继承一个或多个属性或方法的任何类。如果您接受这个定义,这意味着超级类、祖先类、父类和基类在描述类与特定子类的关系方面都是同义的 我不能完全确定你的超定义。我

Oop 无法链接到需要参数的基本构造函数

这是我的密码。当我尝试构建它时,我得到: public class Font : SDLTTF.Font { public Font (string _filename, int _size) { } public void draw () { } } 我认为我需要重写构造函数,所以我尝试公开重写它,但现在我得到: Font.vala:4.5-4.15: error: unable to chain up to base constructor requi

Oop 面向对象继承问题

我有两个类,其中的方法如下所示 |----AVL----| |-----RB------| | | | | | | | | | - insert | | -balance | | | | | | - balance | | | | | |

Oop 无法自定义Sf2上电子邮件字段上的错误消息

我修改代码以遵循@Stony建议 我想自定义我的电子邮件输入错误。我试着跟着这条路走,但没用 我遵循symfony验证教程,创建了我的yml文件,但当我用坏地址填充电子邮件时,错误显示仍然是symfony默认错误,而不是我的自定义消息 /** * * @Route("/info") */ class InfoController extends BaseController { public function contactusAction(Request $request)

Oop 违反坚实的原则

假设我们有一个类结构,其中代码分为两部分,比如说计算机科学和商业,现在这也进一步分为国家,比如印度(cs或MBA)和美国(cs或MBA)。 现在让我们考虑一个场景,我创建了像之类的类。 1) 教育班(家长班) 2) MBA课程扩展了教育课程 3) 理学士(cs)课程扩展了教育课程 现在在国家方面我也上了课 4) 印度_BS类扩展BS(cs)类 5) 印度大学MBA班扩大MBA班 6) US_BS类扩展了BS(cs)类 7) 美国工商管理硕士班扩大工商管理硕士班 现在让我们假设我编写的代码中,国家

Oop 如何使用SpringRoo创建一个类来扩展需要类型参数的类?

例如,org.springframework.data.jpa.domain.AbstractPersistable需要公钥的类型。我尝试过以下方法: roo> entity jpa --class ~.model.Foo --extends org.springframework.data.jpa.domain.AbstractPersistable<Long> 但这样我就失去了类型参数的所有好处 上述问题是否存在可行的解决方案?如果是,那会是什么 作为旁注:在理想情况下

Oop 如何提取抽象?

我的问题微不足道,但我找不到适当的解决办法 代码(仅举个例子): 我们可以看到,func1和func2有相同的主体,除了代码的中间部分:区别在于FuncX2和FuncX3。但是,我不能做基本的抽象类,因为这个代码在中间! 我如何做一般抽象?请不要更改操作(3次a++,3次b++),也不要更改顺序 谢谢假设您选择的语言可以传递函数的“指针”: public class ToRefact { private int Func(int i, Func<int, int> f)

Oop scala是否有功能对象的快捷方式?

我正在用Scala编写类,希望编写一些更新方法,返回原始对象的修改版本。当然,我希望这个类继续保持不变 当然,我可以通过每次显式地创建一个适当类型的新对象来实现这一点,就像在中所做的那样,但是这在继承方面会有所突破,因为在子类的实例上调用方法会返回一个超类的实例 FWIW,我来自OCaml的国度,它有支持函数对象的特殊语法。有关示例,请参见 那么,Scala是否在OCaml中为{}提供了一个等价物呢?我不熟悉OCaml中“函数对象”的概念,但我认为case类可能具备您所需要的功能。对于一个简单的

Oop 为什么我要让程序超负荷工作?为什么不添加一个procedurename?

我重载过程已经有一段时间了,但最近我问自己,与只添加一个名称稍有不同的过程相比,它的实际优势是什么 所以基本上,我为什么要使用 Public Void DoSomething(Int FirstParam, String SecondParam) Public Void DoSomething(String FirstParam, String SecondParam) 代替 Public Void DoSomething(Int FirstParam, String SecondParam)

为什么可以/可以';我们不能在内核编程中应用OOP概念吗?

关于OOP为什么是正确的或者它在哪里工作等等,有很多问题,所以这是其中之一,但是我从内核的角度问它,为什么它没有用作示例 内核主要是用C编写的。它几乎不使用OOP。关于OOP的普遍共识是,它是编程中最好的范例(大多数是新手),但内核尽管是编程中最具挑战性的领域之一,却不使用OOP 所以我想知道OOP在哪些情况下有效,以及为什么它不能用于内核之类的东西?我试图从工程的角度了解它在某些情况下工作的原因。你可以说GUI编程可能会从OOP中受益——从我的理解来看,这是因为你将要创建一个以上的特定事物的情

Oop 继承如何削弱封装

我对面向对象编程有一个问题 继承如何削弱封装 请允许我理解这一点,你可以在Matt Weisfeld的“面向对象的思维过程”一章中找到答案 问题是,如果从超类继承实现 然后改变实现,改变超类 在类层次结构中产生涟漪。潜在的涟漪效应 影响所有子类 我们鼓励链接到外部资源,但请在链接周围添加上下文,以便您的其他用户了解它是什么以及为什么存在。始终引用重要链接中最相关的部分,以防目标站点无法访问或永久脱机。如果这些链接可能重复,则最好合并这些链接。

Oop 接受不同类型的Fortran函数

我有三个转换函数,用于转换角度,代码如下所示 返回的函数与输入的类型相同。这意味着 输入角度必须是程序员希望输出的类型 将其转换为所需的输出类型,例如使用 al=转换(实数(30),“度到弧度”) 我希望程序员能够做al=convert(30,“deg_to_rad”)。 我的想法是使用传输的策略来定义 输出类型 Real :: al, mold al = convert(30,"deg_to_rad", mold) al = convert(30.0,"deg_to_rad", mol

Oop 基于模块的项目与普通项目

我正在一个已建立的企业应用程序上编写代码。我看到应用程序有4个模块,如下所示 -Srk -SrkEJB -SrkUtils -SrkWeb Srk - com.srk.utils - com.srk.ejb - com.srk.web 我浏览了代码,发现有些模块很小,例如:SrkEJB模块只有两个EJB。我不认为有任何理由为2个Java类创建单独的模块 我简化了上述方法,如下所示 -Srk -SrkEJB -SrkUtils -SrkWeb Srk - com.srk.utils

Oop 接口与抽象类(通用OO)

我最近接受了两次电话采访,有人问我接口和抽象类之间的区别。我已经解释了我能想到的每一个方面,但他们似乎在等我提到一些具体的东西,我不知道是什么 根据我的经验,我认为以下是正确的。如果我遗漏了一个要点,请告诉我 界面: 接口中声明的每个方法都必须在子类中实现。 接口中只能存在事件、委托、属性(C#)和方法。一个类可以实现多个接口 抽象类: 子类只能实现抽象方法。抽象类可以具有带有实现的普通方法。除了事件、委托、属性和方法之外,抽象类还可以有类变量。由于C#中不存在多重继承,一个类只能实现一个抽象类

Oop 什么是;“伪面向对象语言”;什么意思?

“伪面向对象语言”是什么意思?我发现一篇文章说它有害,但这是什么意思呢?我已经搜索了这个词,但它没有说太多。我想你指的是: 基本上,这并不是说这种语言是“伪oo”,而是说它的使用方式是 仅仅把对象扔进东西里,声称它使之成为面向对象的东西是错误的,而且会教给人们坏习惯。这里的示例只是将过程方法封装在对象中,而不是真正面向对象。这不是一个常用术语。也许你必须检查文章中的定义。我猜这意味着某些实现是用一种不直接支持面向对象编程的语言完成的,但使用了面向对象的模式。你能提供一个到文章的链接吗?@DoeJ

Oop 为什么ABAP将类分为实现类和定义类?

我知道ABAP对象有点旧,但据我所知,您仍然必须使用至少两个“部分”来创建一个完整的类 ABAP: 爪哇: 公共类MyClass{ { } } 如果像大多数现代语言一样将两者结合起来,难道不会使开发更容易/更快吗 这种分离的原因是什么?对人类来说更容易/更快(可能),但对编译器来说代价高昂:它必须筛选整个代码以确定类及其成员的结构,而在当前形式下,它只需要编译定义以确定引用是否有效。ABAP并不是唯一一种将定义和实现分开的语言:它对单元和类都是如此。有人可能会说,C++在不使用内联成员函数声明

Oop 如何设计一个只使用一个帐户登录所有应用程序的系统

我正在使用企业资源规划(ERP),我们必须设计三个桌面应用程序(财务管理应用程序、人力资源管理应用程序和使用面向对象编程的仓库管理应用程序) 客户希望他们公司的每个人在这三个应用程序中只有一个帐户(比如允许您访问google drive、google mail和google+的google帐户) 如何设计帐户系统以访问每个应用程序? 您需要创建帐户系统来管理您的唯一ID。 唯一id可以是电子邮件地址、电话号码、纳税人识别号、UUID(自动生成的通用唯一标识)、社交id(gmail、github

adaoop";“通用”;抽象类型的类型

我想做的是创建一个类型,其中包括控制代码其他部分传递给它的值。这是菜单系统的一部分,将扩展抽象类型,并且本身是抽象的。我想做的是存储一个访问权限。很简单 type Adjuster is abstract new Menu_Item with record --other fields Value : access Integer; end record; 问题是,我如何使它可以扩展到其他类型?我更喜欢定义整数调整器、浮点调整器等。我有点想使用泛型: generic t

Oop delphi中的许多接口

我希望继承一些D类,并实现接口A、B和C的所有属性和方法。请用Delphi中的一个示例帮助我 我使用delphixe7 一个类如何实现多个接口? 我正在尝试类似的东西: Unit1 Type IRefresher = Interface ['{B289720C-FFA4-4652-9F16-0826550DFCF9}'] procedure Refresh; function getRefreshed: boolean; property R

Oop 如何根据类型更改对象显示?

我原以为我对便便没问题,但现在我对以下几点感到困惑 基本模型 例如,假设您已经创建了扩展抽象类Animal的Dog和Cat对象 抽象动物具有通用属性: 颜色:字符串 腿数 Cat-extends-Animal具有额外属性: 人类宽容:数字 Dog extends Animal具有额外属性: BallsRetrieve:编号 问题 现在,我想以一种通用的方式显示应用程序中所有动物的列表。简单地说,应用程序只需从数据库中提取所有动物对象,将它们放入一个漂亮的列表,每个对象都用其适当的

Oop &引用;“交叉浇铸”;尝试使用静态强制转换失败;为什么?

为什么“交叉投射”不起作用 以下内容将创建此对象继承模型: FOOD / \ CHEESE CAKE 在这里,我尝试从cheese到cake的static\u投射一个指针,生成一个cheesecake:D。我从Apple-Clang/LLVM得到以下错误: 但他们是有遗传关系的:他们是兄弟姐妹 为什么我不能将奶酪转换成蛋糕,就像我将int转换成浮点?为什么我不能从继承自同一基类的派生对象“交叉转换” 下面是最小、完整且可验证的示例,包括静态_-cast和动态_-ca

Oop CreateJS中的类常量未定义

我试图为Adobe Animate中的“Main”类创建一个名为“SPEED”的常量。下面是我的代码 function Main(){ this.update.bind(this)); } Main.SPEED = 3.0; Main.prototype.update = function(evt){ console.log("SPEED"+SPEED); console.log(5+SPEED); } 问题是它显示为未定义。 如果我试着用它做一些计算,结果是NaN

Oop Typescript中一页的设计模式

我有一个单页申请表。 我也在外面注册和登录 我想知道我是否应该使用登录、注册和密码恢复: 1.带类的标准单例模式 export class Register { foo(): any {} } 2.或者可能只在Register.ts等中显示“导出函数foo” export function foo: any {} 3.还是所有内容都保留在模块注册、模块登录中 module Publics { export module Register { export fu

Oop 如何基于DDD实践为博客建模?

假设我们想要基于领域驱动的设计实践对博客进行建模。主要实体是博客、用户、帖子、评论等。那么,如何定义聚合、值对象和存储库?根据DDD的定义,由于所有实体都依赖于Blog实体,因此似乎只有一个大型聚合,Blog作为它的聚合根。但是,它带来了太多的一致性和性能挑战。您应该根据一致性要求对聚合进行建模。一致性边界越大=>聚合越大 你认为只有一个聚合根和Blog作为根是有效的吗。从那里我们可以有blog.Posts、blog.Posts(id).Comments和blog.Posts(id).Likes

Oop Go结构中省略empty有什么用途?

我很好奇省略空的用例是什么,包括以下内容: type Example struct { ID string `json:",omitempty"` Name string `json:"name,omitempty"` exchangeRate float64 `json:"string"` } 我已经读到,省略empty可以防止在打印结构时显示空值,但我对此并不乐观。 另外,为什么要包括结构值的名称,即name,并省略empty

在OOP中定义封装时,我们不能使用对象这个术语吗?

我读过一篇关于封装的定义,其中指出“封装是将数据和函数封装到一个称为类的单元中。”.我的问题是,我们不能在定义中使用术语object而不是class,因为最终对象是使用类创建的,对象只封装其中的数据和函数?我想你大概知道什么是封装了吧?那么你是在问为什么这个定义不能重新表述 封装是将数据和函数包装到称为对象的单个单元中 因为封装与对象没有任何关系。您可以创建一个名为Car的类,它有一些字段,如engine,seats,steeringWheel,以及一些方法applyBrakes,openWin

Oop 在Fortran中定义和调用构造函数

我不知道如何为一个类定义一个简单的构造函数。我要做的是在mytype中分配一个数组,然后在主程序中填充它 我所拥有的是: module types implicit none type mytype real, allocatable :: someArray(:) end type mytype interface module procedure :: init end interface contains

Oop 组合与聚合:在其他包含对象中重用的包含对象的所有权

我正在读一篇帖子,我被下面的陈述弄糊涂了 还值得注意的是,在这种情况下,当且仅当对象不能在另一个计算机对象中重用时,包含的计算机对象才拥有所包含对象的所有权。如果可以,我们将使用聚合,而不是组合,其中不包含所有权 下面是正在引用的代码段 public class Computer{ private Processor processor; private Memory memory; private SoundCard soundCard; //... more

Oop Kotlin GSON自定义反序列化

我正在尝试反序列化一个JSON。我试图用以下约束来适应以下结构 1) 矩形和正方形都是Shape类型,可以有一个形状列表 2) 它们的顺序可以切换一个正方形可以有一个矩形列表(形状列表) 3) 正方形和矩形也可以有一个圆形列表,该列表不继承形状的任何内容,基本上由形状组成 4) 我想唯一地标识square和rectangle类,并在模型结构中反序列化之后将它们视为同一个Shape对象(想知道是否有方法不解析type属性,这样我就知道对象类型是square或rectangle) 到目前为止我创建的

Oop 多态性与切换情况的权衡

我还没有找到任何关于这方面的明确文章,但我想知道为什么多态性是推荐的设计模式,而不是详尽的开关用例/模式匹配。我这样问是因为我从经验丰富的开发人员那里得到了很多不使用多态类的热,这一直困扰着我。我个人在多态性方面经历了一段糟糕的时光,在切换案例方面经历了一段美好的时光,在我看来,抽象和间接性的减少使得代码的可读性变得非常容易。这与通常被视为行业标准的“干净代码”之类的书形成了直接对比 注意:我使用TypeScript,因此以下示例可能不适用于其他语言,但我认为只要您有详尽的模式匹配/切换案例,该

Oop 子类和继承类之间有技术上的区别吗?

从另一个类继承的类和作为其子类的类之间有技术上的区别吗? 以下代码中A和B的区别是什么: (A) (B) 使用B)bar时也是foo。它从foo继承所有成员变量和方法。 在A)中,bar只能访问foo的方法,但它本身没有这些方法。那么它就不是foo了。在您的示例中,bar不是一个“子类”——它是一个嵌套类 有关嵌套类的用途的更多信息,请参见此问题:在继承情况下,可以将派生类视为其基类。也就是说,您可以保留基类引用的集合并调用它们的方法,而无需知道实际对象是否属于任何派生类型,如果是,则知道属于哪

Oop 模块化设计和模块间参考

我不太确定这个标题是否与我想提出的这个问题相匹配 我计划创建一个web MVC框架作为我的毕业论文,在之前与我的导师的一次对话中,他试图定义一些成就,他说服我在这个项目中应该选择模块化设计 那时我已经开发了一些东西,停下来分析了一下它的模块化程度,但我无法真正做到这一点,因为我不知道“模块化”的真正含义 有些事情对我来说不是很清楚,比如,仅仅引用另一个模块就破坏了我系统的模块性 假设我有一个数据库访问模块,它可以选择使用缓存模块来存储复杂查询的结果。正如任何人所看到的,我至少对缓存模块有一个命名

Oop 如何看待带有子类型的多态性

Liskov替代原则规定: 子类型中必须保留超类型的不变量 我对这个原理和多态性的交叉点特别感兴趣。但在特定的子类型多态性中,事实上,参数多态性和Haskell类型类似乎就是这种情况 所以,我知道函数是子类型,当它们的参数是逆变的,返回类型是协变的。我们可以假设方法只是带有隐式“自我”参数的函数。然而,这似乎意味着,如果子类重写父类的方法,它就不再是子类型,因为它的一个方法不再是子类型 比如说。以以下伪代码为例: class Parent: count : int increme

在OOP中封装集合的顺序

假设您有一个属于类的对象集合: [A、B、C、D] 但是他们的顺序意味着什么。您希望能够在运行时委托的订单数量有限。例如[C,A,B,D],[B,D,A,C]等等。您将如何封装顺序的概念,从而允许您在运行时更改顺序,并在以后添加新的顺序而不更改现有代码 语言不重要,但在java或C++中的解释是首选的。如果是,则可以枚举每个可能的顺序,并且可以用单个int表示它。然后更改int或添加更多的ints,以不同的顺序获得更多集合。

上一页   1   2   3    4   5   6  ... 下一页 最后一页 共 123 页