假设您有一个Person对象,它上面有一个方法,promote(),将其转换为Captain对象。这种类型的方法/交互称为什么
这也感觉像是一种颠倒:
myCaptain = new Captain(myPerson);
编辑:感谢所有回复。我遇到这种模式(在Perl中,但在任何地方都相关)的原因纯粹是为了方便。在不知道任何实现交易的情况下,您可以说Captain类“有一个”Person(我知道这可能不是最好的示例,但请确保它不是一个子类)
我假设:
// this definition on
如果a类是B类和C类的集合,那么a类是否更好
存储B和C的ID
加载和存储B和C的整个对象(编辑,参照对象B/C存储,即实例化对象B和C,而不是存储B和C的id)
存储ID并提供方法来提取方法B和C
我假设这取决于性能要求和其他要求,但我只是寻找一般的指导原则或想法。这取决于具体情况。如果对象保留在内存中,则更容易实现OO(且更简单)让A包含B和C。我发现,如果需要持久化对象,A存储B和C的ID会更容易、更高效(这样,如果您直接需要A中的数据,而不是B和C中的数据,则不必将B和C从数据库、文
这是一个无聊的OOP学术问题,但它不是一个家庭作业。我从一个新手程序员那里得到了一个关于OOP的愚蠢教科书示例的问题
假设您正在设计一个正方形类和一个立方体类,哪个应该继承哪个
我看到了一段关系,但它是什么,我真的看不见
你能给我一个考虑到OOP的逻辑论点吗!因为正方形不是立方体,立方体也不是正方形,所以两者都不应从对方继承。正方形可以从多边形继承,立方体可以从多面体继承,但两者本身是互斥的。没有继承继承是一种“是一种”关系(有时甚至不是“是一种”关系,如下面的链接所述)。立方体不是正方形,正方
类可以返回自身的对象
在我的示例中,我有一个名为“Change”的类,它表示对系统的更改,我想知道返回类型为Change的对象或填充了所有最近更改的对象的ArrayList是否违反了设计原则。是的,它可以。事实上,这正是singleton类所做的。第一次调用其类级别的getInstance()方法时,它会构造自身的实例并返回该实例。然后对getInstance()的后续调用返回已构造的实例
您的特定案例可以使用类似的方法,但您需要某种方法来确定最近更改的列表。因此,它需要维护自己的此类变更列表。
我正在创建一个从具有受保护实例化的父类继承的类。超类有一个提供类实例的静态方法
以下代码导致运行时错误MOVE\u CAST\u error:
data: o_child type ref to zchild.
o_child ?= zparent=>provide_instance( ).
我也尝试过:
data: o_parent type ref to zparent,
o_child type ref to zchild.
o_parent = zparent=
我有一个抽象类,如下所示:
class BaseReturnType { }
class DerivedReturnType : BaseReturnType { }
abstract class BaseClass<T> where T : BaseReturnType
{
public abstract T PolymorphicMethod();
}
class DerivedClass : BaseClass&l
我有一个包含在System::Collections::Queue中的数据流。我的数据源可以将相同的数据输出到多个流,但要这样做,需要为每个流复制数据。我目前正在做以下工作:
void DataGatherer::AddMyDataToQueues(MyData^ data)
{
// Send duplicates to all queues
for( int i = 0; i < m_outputQueues->Count; i++ )
{
标签: Oop
naming-conventions
setX()方法名是否仅适用于设置类属性X
例如,我有一个类,其中输出是html表的字符串。在调用getTable之前,必须调用setTable(),它只查看其他属性并决定如何构造表。它实际上并不直接设置任何类属性——只会导致设置属性。调用时,该类将构造strHtmlTable,但您不能指定它
因此,调用它setTable打破了get和set作为类属性接口的惯例
这种方法还有其他命名约定吗?
Edit:在这个特定的类中,至少有两个(总共8个可选)其他方法必须在类知道构造表所需的一切之前被调用。我
可能的重复项:
寻找合适的抽象名称有时会很费时,尤其是当你的母语不是英语时。我想知道是否存在某种在线词汇表/词典来描述与程序相关的概念。我们都知道GoF中的设计模式,但我正在寻找更完整的词汇,包括概念之间的关系
谢谢最重要的是,要遵守命名惯例
我是一名.NET开发人员,因此我发现最好遵循.NET Framework使用的设计准则
最重要的是,要遵守命名惯例
我是一名.NET开发人员,因此我发现最好遵循.NET Framework使用的设计准则
您知道程序中有命名工件的约定吗
例如,Java已
例如,我们有类Man
如果Man.age受到保护,那么我不明白为什么chuckNorris(类的实例Man)可以更改对象jackBauer(类的另一个实例Man)的受保护/私有属性age)。他不应该那样做(依我看)
在我看来,受保护/私有属性的值应该只属于对象本身,而不属于类
我想我需要一些解释,我很困惑。私有属性只能通过类中的方法访问。
受保护的属性只能在子类中访问。因此,对象jackbauer不能修改Man类对象中任何私有或受保护的内容。希望这将有助于考虑以下Java类:
public cl
我有四个类似的类结构,它们是从XSD生成的,每一个都是不同版本的API
问题是,我有在所有这些不同的类结构上操作的类,但在所有的结构中,很多代码都是相同的。我不能为每个类都提供接口,因为所有类都是从XSD生成的。但我想从我的代码库中删除重复项
这里有什么好的OO解决方案
谢谢。我会使用一些对象合成。定义一个包含共享功能的类,并将实例保留为每个生成类的成员。尽量减少在类中保留的可变状态的数量,以便更容易地进行测试。我可能会选择使用facade类。这门课是你需要了解其他四门课的一点。它处理将调用中继
标签: Oop
access-modifiersprotected
我能理解为什么有公共访问修饰符和私有访问修饰符,这两种修饰符在几乎任何语言中都可以找到。我甚至可以理解为什么可能会有一个包修饰符,因为您可能希望让您的类(紧密属于一起的类)以一种不适合公共交互的方式相互交互(例如,由于它取决于类内部的知识,可能是因为它会泄露一个秘密,或者可能是因为它可能随时发生变化,依赖它会破坏所有现有代码,等等)。然而,为什么我想要一个受保护的标识符?别误会,我知道受保护的意思,但是为什么我想要我的类的子类访问某些实例变量或使用某些方法,仅仅因为它们是子类,即使它们是不同包的
前提是我拥有以下信息:
TeamGamesDaoClass:
public function listOfTeams() {
$select = $this->select()
->from(array('t'=>'teams'), array('cod_team','name','score'));
$rows = $this->fetchAll($select);
foreach($rows
我目前正在享受从面向对象语言到函数式语言的转变。这是一股新鲜空气,我发现自己比以前更有效率了
然而,在FP方面,OOP有一个方面我还没有看到令人满意的答案,那就是多态性。i、 我收集了大量的数据项,当它们被传递到某些函数中时,需要以完全不同的方式进行处理。为了便于讨论,假设有多种因素驱动多态行为,因此可能会有许多不同的行为组合
在OOP中,使用多态性可以相对较好地处理这些问题:通过组合+继承或基于原型的方法
在FP中,我有点夹在以下两者之间:
编写或组合通过对每个数据项的值进行分支来有效实现多
假设我有一个用某种对象填充列表的方法。以下方法设计的优缺点是什么
void populate (ArrayList<String> list, other parameters ...)
ArrayList<String> populate(other parameters ...)
我更喜欢哪一个
这看起来像是关于方法设计的一般问题,但我在谷歌上找不到令人满意的答案,可能是因为没有使用正确的关键字。第二个问题对我来说似乎更实用,线程更安全。大多数情况下我更喜欢它。像
我在苹果公司读这篇文章:
在这里,我从未听说过OOP。我在1991年左右毕业于计算机科学,在OOP开始流行之前,所以OOP的使用仅仅是定义一些类,然后调用方法,就是这样。对象之间没有交互——一切都是在一个调用各种对象方法的主函数中完成的
直到我读了上面的文章,其中谈到了接口、动态类型、动态绑定,一个对象可以向另一个对象发送消息,甚至在第二个对象发明之前——只有“接口”或消息需要很好地定义。第二个对象目前可能具有未知的数据类型,这将在将来发明,但它所需要做的只是理解“消息”
因此,通过这种方式,
假设我有一个MyCollection对象的集合MyClass
Set MyCollection=Nothing调用每个包含对象的析构函数,还是我应该单独设置每个对象=Nothing
我显然关心内存泄漏的原因
Dim MyCollection As Collection
Set MyCollection = New Collection
... 'add objects of type MyClass here
Set MyCollection = Nothing
销毁此类会调用每个对象的析构
很简单,在设计一个新类时,我如何确定不变量应该是什么?什么定义了不变量?我听说它与有效性有关,但这仍然模棱两可。是什么使给定实例有效或无效是有争议的
我应该跟着我的直觉走吗?是否有确定不变量是什么的指导原则?不变量始终可以表示为谓词,参数是类的一些或所有状态变量(字段)。一个类可以有多个不变量。例如,假设您有一个帐户类,该类具有初始余额,交易列表,当前余额。此外,我们将事务保存在排序(按日期)列表中。对于此类,至少应维护两个不变量:
1) 初始余额+总额(交易金额)=当前余额
2) 对于交易列表
上面的代码可以工作,但是为什么我们能够创建派生类的对象并将其分配给基类引用。
此外,对象变量“b”将能够访问类Base的所有非私有变量和方法,即使它引用的是派生类。
为什么引用派生对象的对象变量“b”能够访问基类而不是派生类。允许上述代码工作的理论称为:Derived是Base的子类型时,这形成了“is-a”关系。替换原则假定,只要预期Base的实例,就可以用派生的的实例替换
以后无法访问derivate类的属性和方法的原因是(至少对计算机而言)没有任何迹象表明Base类型的变量包含允许访问这些
例如:
您在A页->您执行一些操作->您单击提交->您希望在B页->您然后在该页执行一些操作(B)->您单击提交->您在C页->您在该页执行一些无效操作(C)->您单击提交->您希望保留在C页
等等,等等
希望这能澄清一些问题。选择答案的速度太快了,没有给人们太多的时间来回应道歉,我没有意识到礼仪。谢谢你的帖子,内容非常丰富,我选择了它,尽管非常感谢大家的贡献!感谢解决你问题的帖子是件好事,特别是如果它是一个技术问题,有明确的是/否答案。在这种情况下,只要某件事情对你有效,将其标记为答案,它就会
我至少有两个不同的课程,如下所示:
//NOTE : these two classes have getter and setter also
class Artist {
String artistName;
String artistWebsite;
String artistDbpedia;
String artistImage;
List<String> astistAlbumsName;
List<String> astistAlbumsUrl;
}
cl
我正在设计一个应用程序来监控组件的可用性
因此,首先我需要一个调度程序定期运行可用性检查(例如作业)
有两个组件(预计将来会支持更多组件)需要监控,每个组件都有不同的方法来确定是否可用
因此,我想我应该使用一个名为verify的抽象布尔方法来创建一个抽象的ComponentStatusVerifier类,并为每个组件创建一个子类来实现特定的验证策略
但问题有点复杂。应用程序应该支持在两个不同的平台上运行(例如服务器,将来可能支持更多的平台),要监控的组件集取决于部署应用程序的平台
可以为每个目标
我对面向对象编程有点陌生,我正在学习这些概念。现在我只需要在逻辑上组织课程方面的帮助。关于方法、属性和构造函数的部分我可以理解。我被分配了以下问题
假日旅行车销售新的休闲车和旅行车
拖车。当新的车辆到达假日旅游车辆,一个新的
创建车辆记录。新车记录中包括
车辆序列号、名称、型号、年份、制造商和基本成本。
当客户到达假日旅行车时,他或她会工作
与销售人员协商车辆购买事宜。购买时
达成一致后,销售人员填写销售发票。
发票汇总了采购,包括全部客户
信息,关于置换车辆(如有)的信息
折价补贴,以及购买车
我称之为“送货员”。我见过它的几种变体,但问题是类具有依赖性的唯一目的是将其传递给协作者,而从不使用依赖性本身
(我之所以使用PHP,是因为它是我最熟悉的,但它与语言无关)
我在野外看到的最常见的变体可能就是为此滥用继承,在父类中存在一个属性,这样子类就可以访问依赖项,即使父类从未实际使用依赖项本身
class Dependency{}
class A {
protected $dependency;
public function __construct(Depende
假设我有一个存储库(ContactsRepository),其方法类似于getAllContacts(userId)。
(ContactsRepository)从服务器获取所有数据。在第一次调用getAllContacts(userId)method之后,我想缓存这个数据。我的问题是我应该在哪里实现缓存机制,在相同的(ContactsRepository)中,当我再次调用getAllContacts(userId)方法时,存储库将返回缓存数据,或者我需要将数据放在另一个地方(可能是存储库).您可
在我的应用程序中,我划分了应用程序逻辑的下一个层次:
公用事业
应用程序抽象
应用程序抽象的简单/通用实现(#2)
具体的应用程序实现(附加#3的附加函数和类,以满足我们的最终应用程序目的)
抽象mvc应用程序架构(应用程序的mvc逻辑抽象)
具体mvc应用
这些级别的说明:
公用设施、图书馆等等。。。(不具有依赖性,可能由任何具体的应用程序类使用)
应用程序的抽象类。定义非常抽象的应用程序类(不具有依赖性)
抽象应用程序的具体类。定义抽象应用程序的一般具体类(与逻辑级别#2相关)
混凝土(最终
为了便于使用,我将其封装在MATLAB类中:
classdef myclass < handle
properties(SetAccess=protected)
cpp_handle_
end
methods
% class constructor
function obj = myclass()
obj.cpp_handle_ = myclass_init();
end
我有一些常用的函数,比如用于调用数据库的语法糖、日志记录或站点范围的信息,比如查找表
如果我把它们放在一个站点范围的基类中,我就可以访问它们,但是这样使用父类似乎是错误的。将基类用作“has a”关系比使用“is a”关系更有意义
或者这是一个好的设计?这样做有什么问题吗?父类应该实例化一些基本功能,子类应该实例化区别代码
IMNSHO,您所描述的是该过程的bastardization。理想情况下,您只希望序列化POCO类,因为它们只包含属性而不包含方法
为公共功能创建基类可能是一个好主意,如果
我有一个只有main的类,它读取一些txt并执行算法
我的班级看起来像:
class doThejob{
public static void main(String args[]){
//*****start part A******
//do the reading from text file, and tokenize it
// process into the form I need,
我如何实现上面这些类,B不能从A获得Add方法,但C可以从A获得Add方法。有人能告诉我,我如何实现吗?这不能在一个继承链上实现。这更像是一项写作工作。即:
I have three class.
Class A
{
public void Add()
{
//Do-something ()
}
}
Class B:A
{
//Do-something ()
}
Class C :B
{
//Do-something ()
}
请记住,当您希望将整个父
这只是一个一般的设计问题。我正在设计一个小应用程序,它需要以分层方式存储文件
例:
用户名也可以有任何字符,如“/”、“@”
使用用户名作为目录名是明智的还是应该在每个组下维护一个映射文件,将每个用户名映射到简化的通用目录名,即
user1=dir1
user7=dir7
尽管有人建议对用户名进行哈希,但这既不便于检查(因此无法通过检查文件系统来判断与目录相对应的用户名是什么),也不可逆(因此人类系统管理员和软件都无法通过查阅文件系统来枚举用户名)。因此,它可能对您有效,也可能不适用
我建议对
不久前,我读过一些类似于面向对象的“约定”的东西,但我不确定我是否正确地记住了它
它说,方法必须将继承层次结构中最通用的对象作为参数,同时返回最后代的对象
这是真的吗?如果是真的,有人能稍微解释一下吗
例如:
IList<T> someMethod(IList<T> someList)
{
IList<T> resultList = new List<T>();
... do something with resultList .
我试图在UML类图中表示以下情况
我们有一个名为Selection的类,用户在其中选择
下一个屏幕是
选择类有一个属性screen:screen,其中screen是一个接口
界面屏幕有多种实现方式。例如简单屏幕、超级屏幕等
selection类中的screen属性应该能够包含screen的任何实现的实例,具体取决于用户的选择
我的问题是:
在OO中可以这样做吗
在这种情况下,类图表示是什么样子的
现在我有一个这样的图表:
如果您想修改我使用的yuml.me图表,这是链接
感谢您的帮助为了对抽象“
标签: Oop
constructorrebolrebol2
我通常以“本能”的方式通过函数进行编程,但我目前的问题很容易通过对象解决,所以我继续使用这种方法
为此,我试图找到一种方法,为对象提供一个构造函数方法,例如python中的init()
我查看了文档,但找不到任何相关内容。Rebol中没有特殊的构造函数,但如果在spec块中创建对象时需要,可以编写特殊的init代码。例如:
a: context [x: 123]
b: make a [
y: x + 1
x: 0
]
因此,如果按照惯例在基本对象中定义自己的“构造函数”,则可
我的应用程序管理水果记录。该应用程序支持不同类型的数据源。每个水果在数据源中都有一个唯一的id。无法保证数据源之间的唯一性,因为我无法控制这些ID
我已经创建了一个类FruitSourceManager{},它允许我们在我的应用程序中配置(添加/删除)不同的水果源
我还有类BasketFruitSource{}
class-source{}
类TruckFruitSource{}每个类都实现
接口IFruitSource{}
我有一个
类管理器{}
它通过调用IFruitSource上的操作来提
我是PythonOOP新手,我正在尝试一些关于继承的练习
class userProfile():
def __init__(self):
self.listPost = []
在不同的文件上
from Profile import userProfile
class userPosting(userProfile):
def __init__(self):
self.compactList = []
self.listPost
我有一个服务器类,一个消息抽象基类和许多消息类型MessageType1,MessageType2等,它们都是从消息派生的。服务器收到一条消息,并开始处理它。现在,我如何使适当的行为发生,如何以面向对象的方式进行?我知道获取类型并使用开关不是解决方案
第二个问题:
我觉得它和第一个有很多共同点。我有一个基本的对象类和从中派生的许多对象类型。物体在一个想象的空间中随机“飞行”,任何类型的物体都可能“撞到”另一个。对于这种遭遇的每一对不同类型,我希望定义影响这两个对象的不同行为。我如何用面向对象的方
我有两个模型类:User和Solution,我想实现一个方法来获取用户提交的所有解决方案。我可以在User中将其作为实例方法(例如,User.getSolutions()),或者在Solution中将其作为静态方法(例如,Solution.getSolutionsFrom(User\u id)。我不确定哪种设计更好。User.getSolutions()感觉更自然,但实现将受到影响,因为方法需要从用户获得的唯一东西是用户id,其余逻辑处理的是解决方案。此外,如果我只有用户id,我必须构造一个虚拟
有人知道什么时候可以在ada中使用object.method符号,有什么好的资源可以解释吗
例如:
person.walk(10);
我一直在用谷歌搜索,但还没弄明白。它是否仅适用于标记的记录
我使用GPS作为我的Ada IDE,我非常喜欢能够使用bla.并获得建议的方法来调用
我也有点困惑,为什么点符号不能用于第一个参数与所讨论的类型匹配的任何东西
谢谢
Matt是,它仅适用于标记的记录(vtable用于查找相应的方法)。它可用于所有基本操作,或用于同一包中定义的“类”操作。
符号的一个好处
我有一个叫做节点的东西。定义和定理都是节点的一种类型,但只允许定义具有复数属性:
class Definition(Node):
def __init__(self,dic):
self.type = "definition"
super(Definition, self).__init__(dic)
self.plural = move_attribute(dic, {'plural', 'pl'}, strict=False)
我对此做了一些尝试,反应很好,但尝试一个听众的例子,我有一个错误:
有人可能会测试这段代码,并解释为什么它找不到一个类的事件吗
void functionONE(){
result("\n dentro de la FUNCION ONE")
}
class EVENT_ONE : object{
void accionONE(object self){
result("\n dentro de accionONE()")
}
EVENT_
我的问题是:当我从我实例化的牌组中随机抽取一张牌时,回报有时是正确的(即KING_梅花),但有时我会得到一张奇怪的(即SEVEN_梅花)。这很奇怪,因为在实例化组时,我在组构造函数中添加了一个print-line语句,以查看是否正确添加了ID。每次卡的id都是正确的
Blackjack的hitUser()方法中的println用于检查正在提取的卡的ID。有时候是对的,有时候不是。谁能告诉我发生了什么,为什么
下面是可运行的相关代码
我的卡片类别:
import java.util.*;
impo
我正在努力使我的Go应用程序更加面向对象。现在我有以下电话:
groups.AllGroups = GrowGroupsArray(groups.AllGroups)
这要求:
func GrowGroupsArray(g []Group) []Group {
newSlice := make([]Group, len(g), 2*cap(g)+1)
copy(newSlice, g)
g = newSlice
return g
}
这在技术上是可行的,但我宁
标签: Oop
abstractionprocedural
我试图理解行为抽象,特别是与面向对象编程的概念相关的行为抽象。我目前的理解是,它是数据和过程抽象的组合,结合起来创建类方法。这些方法本质上是作用于特定数据类型(数据抽象)的函数(过程)。有人能帮我澄清一下吗?我不知道我是否会给出最好的答案,但我想我应该试一试
抽象意味着,
简单语言:数据的逻辑表示
例如队列、堆栈等
来自wiki的详细信息
抽象数据类型(ADT)是数据类型的数学模型
其中,数据类型由其行为(语义)从
数据用户的观点,特别是可能的
值、对此类数据的可能操作以及
这些行动
在面向对象
(我找到了这个问题的部分答案,但问题仍然成立)
在C++中,你有这个讨厌的“特性”,尽管在类定义之外定义函数,但是你仍然必须在类中声明它。它有它的优点,但仍然是非常恼人的,因为我想要的不仅仅是透明的代码,还有很多辅助函数,而不需要在最终的API中显示它们
我理解面向对象C++的设计不允许它(也许有一些疯狂指针指向函数的方式,如果你知道,我也想知道它:D),但是我感兴趣的是,是否有任何流行的编程语言能够在类主体之外声明/定义函数。当然,我知道其他方法(只需将每个变量保持为公共),但它不允许我们在不
我从F#开始,在理解语法方面取得了一些进展。然而,我仍然不清楚使用F#功能的最佳方式。在我来自的Python中,通常有一种“最佳”(几乎是规范的)做事方式。也许F#也是这样,但我还没弄明白。所以我下面的问题是关于使用F#的最佳方式,而不是关于F#语法的技术问题
最近我看了Eric Meijer博士的一个视频(C9讲座-函数式编程基础第2章,共13章),其中Meijer博士称赞OOP的点表示法,他注意到它允许Intellisense显示可用方法的列表。他哀叹在纯FP中没有这样的功能,这通过帮助程序
我现在正在做一个项目。在这个项目中,许多对象都有一个ID,用于从代码不同部分的配置文件中获取实体的属性和行为
我使用字符串作为ID,这很适合我,但存在一些问题:
打字错误不容易被发现
没有代码完成,所以我需要记住所有的ID
我正在考虑使用枚举结构作为对象ID。这应该可以解决所有这些问题。我想知道,使用enum作为实体标识符有什么缺陷吗?使用enum作为ID有很多缺陷:
比较:您不能使用=直接比较两个枚举实例,您需要使用开关或a.equals(b)或Type.enumEq(a,b)
序列化:,J
通常,抽象类型是后代派生类型的模型。如果类型中包含的过程被延迟,则该类型中包含的过程应该是公共的,因为私有过程不能在模块本身之外被引用或重写。但是,如果我希望每个子体都有相同的函数私有过程来执行某些操作(例如,测试其实例的初始化状态),那么如何设计抽象派生类型呢?我是否必须在每个子体中手动定义它们,或者我是否可以抽象地放置一个模型并在子体中实现它?
下面是一个例子:
module test1
implicit none
private
public :: my_nume
标签: Oop
crystal-langamber-framework
我对琥珀框架、crystal lang和面向对象编程都是新手。我遵循教程,并尝试使用这个脚手架创建一个简单的表单
amber g scaffold item name:string path:string type:string size:float created:date
我可以看到这个类是在models文件夹中创建的
class Item < Granite::Base
connection pg
table items
column id : Int64, prim
YAGNI(您将不需要它)规则说,我们应该在代码中使用最少数量的元素来完成这项工作
但是,每当我创建一个类时,建议我们首先创建一个接口,然后根据“编程到接口而不是具体实现”的原则,通过拥有一个子类来扩展它,这样我就可以更好地适应未来的需求,并拥有更多松散耦合的代码
但是YAGNI认为,从一开始,我们就应该避免创建不必要的接口
那么应该遵循哪一条以及什么时候遵循?来自Martin Fowler的
Yagni仅适用于软件中内置的支持假定功能的功能,不适用于使软件更易于修改的工作。
一般来说,抽象编程
1 2 3 4 5 6 ...
下一页 最后一页 共 91 页