Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';我对封装应该如何工作感到困惑_Java_Oop_Encapsulation_Software Design_Solid Principles - Fatal编程技术网

Java I';我对封装应该如何工作感到困惑

Java I';我对封装应该如何工作感到困惑,java,oop,encapsulation,software-design,solid-principles,Java,Oop,Encapsulation,Software Design,Solid Principles,你好今天我想玩好OOP设计的概念,我试着为一家电影商店编写一个应用程序,在那里顾客可以从电影商店购买电影。我有三节课。一个表示电影商店的类,一个表示客户的类,另一个表示电影的类。 现在我的问题是:让客户自己创建电影实例,而不从电影商店购买,这样好吗?我应该相信编写customer类的程序员吗?这个问题与封装有关吗? 封装意味着将数据成员声明为私有,并通过setter和getter等公共方法访问它们。例如,在您的场景中,您希望有一个类型为Movie的私有变量。您可以通过公共get方法访问电影,

你好今天我想玩好OOP设计的概念,我试着为一家电影商店编写一个应用程序,在那里顾客可以从电影商店购买电影。我有三节课。一个表示电影商店的类,一个表示客户的类,另一个表示电影的类。

现在我的问题是:让客户自己创建电影实例,而不从电影商店购买,这样好吗?我应该相信编写customer类的程序员吗?这个问题与封装有关吗?
封装意味着将数据成员声明为私有,并通过setter和getter等公共方法访问它们。例如,在您的场景中,您希望有一个类型为Movie的私有变量。您可以通过公共get方法访问电影,在该方法中,您可以在访问电影对象之前获得某种授权。setter方法也是如此。这称为封装。例如,请参见基本实现:

class MovieStore{

    private Movie currentPlaying;

    public Movie getCurrentPlayingMovie(){    //Get method
        if(authorizationMethod()){
            return currentPlaying;
        }
        //Authorization failed

        notifyAuthorizationFailed();
        return null;
    }

    public void setCurrentPlayingMovie(Movie m){    //Set method
        //Same like above
    }

}

如果已将电影对象声明为公共,则任何人都可以直接访问该电影对象,而您没有任何授权。在开发软件时,数据成员似乎不需要任何保护。但将来可能需要它,因此最好始终实现封装(通过将它们声明为私有并向该成员添加setter和getter),以便您可以随时编辑方法。

请向我们展示您的做法,以便我们可以帮助您进行设计。此外,在标记时请小心,这与java还没有任何关系。你做错了。客户和电影是状态,它们是类应该知道的(封装)和谈论的(消息传递),而不是类应该建模的内容。围绕解决方案系统职责而不是问题域实体设计您的类。您能再解释一下吗?