Inheritance Eiffel:从类继承并将当前对象转换为类的正确方法

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

这不是我第一次尝试从类继承并将对象转换为类,在本例中,使用有效的\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类,它是一个扩展的类

在我的策略中,我试图召唤造物主

父级创建过程 然后叫一个深拷贝 下面是我班上的其他同学:

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