标签: information-hiding

你在哪里为私人方法进行单元测试?

在C#类中,将私有函数的单元测试放在哪里?

维基百科一篇文章建议:

  • 将测试与他们正在测试的成员放在同一个类中
  • 使用部分类

就个人而言,这些方法都不合适,我更喜欢将单元测试放在一个单独的项目中.

有什么想法吗?

(我知道关于是否应该对私人方法进行测试存在相当多的争论.我想听听论点的两个方面.)

c# tdd unit-testing encapsulation information-hiding

4
推荐指数
3
解决办法
2363
查看次数

一个班级的私人功能可以访问?

我一直在努力学习C++.最近我遇到了以下代码:

#include <iostream>

using namespace std;

class Point {
    private:
        double x_, y_;

    public: 
        Point(double x, double y){
            x_ = x;
            y_ = y; 
        }

        Point() {
            x_ = 0.0;
            y_ = 0.0;   
        }

        double getX(){
            return x_;  
        }

        double getY(){
            return y_;  
        }

        void setX(double x){
            x_ = x; 
        }

        void setY(double y){
            y_ = y; 
        }

        void add(Point p){
            x_ += p.x_;
            y_ += p.y_;
        }

        void sub(Point p){
            x_ -= p.x_;
            y_ -= p.y_;
        }

        void mul(double …
Run Code Online (Sandbox Code Playgroud)

c++ oop gcc information-hiding class

4
推荐指数
2
解决办法
840
查看次数

实用示例封装与信息隐藏与抽象与数据隐藏在Java中

我知道有很多关于这个问题的帖子,它有实时例子的理论解释.这些OOP术语非常简单,但对于像我这样的初学者来说更加困惑.但我期待这里不是一个定义和实时的例子但是期待java中的代码片段.

请问任何人都可以为Java中的每一个提供非常小的代码片段,这将有助于我理解封装与信息隐藏与抽象与数据隐藏的实际关系吗?

java oop abstraction information-hiding data-hiding

4
推荐指数
2
解决办法
2万
查看次数

在 Go 中存储状态

我正在用 Go 编写一个简单的程序作为学习该语言的练习。该程序是一个游戏玩家:它是一个基于文本的游戏,然后通过/exec.Command与其进行通信。经过一番闲逛和阅读大量在线文档后,我设法让框架开始工作——相当于 Hello World,我在其中建立了双向通信,并且可以处理程序终止等错误。StdinPipeStdoutPipe

现在我正在尝试编写实际的玩游戏的人工智能代码。由于我的目的是学习这门语言,因此我在风格上非常小心——我不只是想用 Go 编写 C(或其他语言)。

程序中明显的分工(一旦完成所有设置)分为两部分。首先,程序查看当前状态并决定应向游戏发出什么命令。其次,程序查看返回的数据并相应地更新状态。(是的,这是一个简单的游戏 - 它等待输入然后响应,不存在计时问题。)

我不确定这些状态信息应该去哪里。将其全部转储到全局范围中感觉是错误的,而创建一个巨大的单例对象似乎更糟糕(Go 并不是特别面向对象)。无论如何,我不想让函数传递并返回 20 多个变量。

一般性建议很好,但我最感兴趣的是适合 Go 的惯用方式。根据要求,我可以共享代码,但我认为这没有帮助。

architecture information-hiding coding-style global-variables go

4
推荐指数
1
解决办法
3327
查看次数

3
推荐指数
1
解决办法
237
查看次数

依赖注入,单元测试和信息隐藏

假设你有一个类Foo,类型为Bar的私有成员.您不希望用户知道Foo的实现包含一个Bar,并且您不希望用户能够创建自己的Bar并通过Foo的构造函数,任何其他方法或配置文件传递它.

编辑:Bar也存在问题,因为它访问测试环境控制之外的资源,例如特殊数据库,网络连接或其他进程.

当你还希望能够对Foo进行单元测试时,你会怎么做?依赖注入仍然可能吗?这是否意味着Bar和Foo过于紧密耦合(即使依赖是单向的)并且这种情况永远不可接受?

unit-testing information-hiding dependency-injection

3
推荐指数
1
解决办法
605
查看次数

用一次性垫编码的信息可以与随机噪声区分开来吗?

我知道正确使用的一次性密码密码中的密文显示绝对没有关于加密消息的数据.

这是否意味着无法区分使用一次性密码加密的消息与完全随机的噪声?或者是否有一些理论方法可以确定是否存在消息,即使您无法了解其中的任何信息?

random encryption cryptography information-hiding information-theory

3
推荐指数
1
解决办法
426
查看次数

降低静态方法的可见性

我知道孩子不能降低非静态方法的可视性,而且我理解为什么会这样。

但是,我读过“可以通过重新声明静态方法来隐藏它”。但是我不明白如何用Java实现。

这真的有可能吗?如果是,该如何做(代码示例),为什么要引入它(这似乎与不降低接口可见性的原理相矛盾)?

java inheritance information-hiding

3
推荐指数
1
解决办法
1008
查看次数

C 结构体信息隐藏(不透明指针)

我目前对 C 结构信息隐藏的概念有点困惑。

这道题的背景是一个嵌入式c项目,对OOP的了解几乎为零。

到目前为止,我总是在相应模块的头文件中声明我的 typedef 结构。因此每个想要使用该结构的模块都知道该结构类型。

但经过 MISRA-C 检查后,我发现了中等严重性警告:MISRAC2012-Dir-4.8 - 结构的实现不必要地暴露给翻译单元。

经过一番研究后,我通过限制结构成员对私有范围的可见访问,发现了 C 结构信息隐藏的概念。

我立即尝试了一个简单的例子,如下所示:

struct_test.h

//struct _structName;

typedef struct _structName structType_t;
Run Code Online (Sandbox Code Playgroud)

struct_test.c

#include "struct_test.h"

typedef struct _structName
{
    int varA;
    int varB;
    char varC;
}structType_t;
Run Code Online (Sandbox Code Playgroud)

主程序

#include "struct_test.h"

structType_t myTest;

myTest.varA = 0;
myTest.varB = 1;
myTest.varC = 'c';
Run Code Online (Sandbox Code Playgroud)

这会产生编译器错误,即对于 main.c,myTest 的大小未知。当然是这样,main.c 只知道 structType_t 类型的结构存在,而没有其他信息。

所以我继续研究并偶然发现了不透明指针的概念。

所以我尝试了第二次尝试:

struct_test.h

typedef struct _structName *myStruct_t;
Run Code Online (Sandbox Code Playgroud)

struct_test.c

#include "struct_test.h"

typedef struct _structName
{
    int varA;
    int varB;
    char varC;
}structType_t;
Run Code Online (Sandbox Code Playgroud)

主程序

#include …
Run Code Online (Sandbox Code Playgroud)

c struct information-hiding misra opaque-pointers

3
推荐指数
1
解决办法
2531
查看次数

使用firebug隐藏表单输入字段的最佳方法是什么?

我有一个发布到外部API的表单.有一个名为customer_token的参数,它作为输入字段传递.它用于API的身份验证,并为每个客户分配一个令牌.输入字段在Firefox的Firebug中可见(即使它是隐藏字段).

我怎么隐藏它?

选项 使用我最初想到的javascript

我认为在提交表单之前使用javascript在运行时创建输入字段并立即删除该字段将起作用,但该字段将暂时出现.因此,即使一个人无法手动获取它,我担心爬虫或蜘蛛(我不知道确切的术语 - 但是一些自动化脚本)可能会获得客户令牌.有更好的解决方案吗?表单提交后,仍会显示相同的表单.

使用Ikke建议的一次性令牌概念

我不确定它会如何起作用?API需要正确的客户令牌值来处理任何请求.因此,即使生成一次性令牌并返回,也必须发送带有客户令牌的请求.这样,任何人都可以看到我的客户令牌值,他们也可以发送请求获取一次性令牌并使用它.那怎么解决这个问题呢?

已解决 检查如何将表单发布到我的服务器然后发布到API,而不是直接发布(出于安全原因)? 谢谢,Sandeepan

html forms information-hiding external-application

2
推荐指数
1
解决办法
2130
查看次数