Inheritance Eiffel:从类继承并将当前对象转换为类的正确方法
这不是我第一次尝试从类继承并将对象转换为类,在本例中,使用有效的\u HTTP\u RESPONSE=>RESPONSE.status=200、有效的\u HTTP\u json\u body=>validate json content等扩展HTTP\u CLIENT\u响应的功能 为此,我希望继承HTTP_客户端_响应并添加特性,并从HTTP_客户端_响应创建自定义DB_实体_HTTP_客户端_响应 似乎我很难设置内部属性。。。最好的方法是什么?我也有同样的例子,试图创建一个从NATURAL_32继承的WATT类,它是一个扩展的类 在我的策略中,我试图召唤造物主 父级创建过程 然后叫一个深拷贝 下面是我班上的其他同学:Inheritance Eiffel:从类继承并将当前对象转换为类的正确方法,inheritance,eiffel,Inheritance,Eiffel,这不是我第一次尝试从类继承并将对象转换为类,在本例中,使用有效的\u HTTP\u RESPONSE=>RESPONSE.status=200、有效的\u HTTP\u json\u body=>validate json content等扩展HTTP\u CLIENT\u响应的功能 为此,我希望继承HTTP_客户端_响应并添加特性,并从HTTP_客户端_响应创建自定义DB_实体_HTTP_客户端_响应 似乎我很难设置内部属性。。。最好的方法是什么?我也有同样的例子,试图创建一个从NATURAL
class
DB_ENTITY_HTTP_CLIENT_RESPONSE
inherit
HTTP_CLIENT_RESPONSE
create
make_from_http_client_response
convert
make_from_http_client_response ({HTTP_CLIENT_RESPONSE})
feature -- Initialization
make_from_http_client_response (a_client_response: HTTP_CLIENT_RESPONSE)
do
make (a_client_response.url)
deep_copy (a_client_response)
end
feature -- Status report
valid_response: BOOLEAN
do
Result := status = 200
end
我发现目前唯一有效的方法是将所有属性设置为其他属性,这是deep_copy的语义
make_from_http_client_response (a_client_response: HTTP_CLIENT_RESPONSE)
do
make (a_client_response.url)
set_body (a_client_response.body)
set_http_version (a_client_response.http_version)
set_error_occurred (a_client_response.error_occurred)
set_error_message (a_client_response.error_message)
set_raw_header (a_client_response.raw_header)
set_status_line (a_client_response.status_line)
... I surely forgot something...
end
没有内置功能可以从另一种类型的对象初始化一种类型的对象。功能复制和深度复制需要相同类型的对象。因此,在代码中显式设置属性是一种方法
另一种选择是采用客户-供应商关系,而不是继承关系。这是否合适取决于应用。请解释设计决策或提供具体示例?如前所述,目前还不清楚你想要达到什么目的。@AlexanderKogtenkov希望编辑能有所帮助。。。
make_from_http_client_response (a_client_response: HTTP_CLIENT_RESPONSE)
do
make (a_client_response.url)
set_body (a_client_response.body)
set_http_version (a_client_response.http_version)
set_error_occurred (a_client_response.error_occurred)
set_error_message (a_client_response.error_message)
set_raw_header (a_client_response.raw_header)
set_status_line (a_client_response.status_line)
... I surely forgot something...
end