繁体   English   中英

面向对象的基本编程

[英]Basic Object Oriented Programming

我目前正在学习Java,并被要求编写一个程序,将演员和电影作为课程处理。

actor类具有以下属性:
Name, Address, age, myFilm (一个数组或者是一个阵容或者是一个阵容Name, Address, age, myFilm特定演员所出演的所有电影。

电影类有以下属性:
Name, Code (字符串,字符串)

我用getter和setter方法实现了这些类来处理数据:
到目前为止我的演员班:

public class actor {
    private String name;
    private String address;
    private int age;
    int[] myFilms = new int[3];

     public actor (String name, String address, int age) {
     }


     public void setName (String name) {
          this.name = name;
     }

     public void setAddress (String address) {
          this.address = address;
     }

     public void setAge (int age) {
          this.age = age;
     }

     public void setFilm () {

     }

     public String getName () {
         return name;
     }

     public String getAddress () {
         return address;
     }  
}

我的电影课:

public class film {

    private String name;
    private String code;

    //Constructor
    public film () {

    }

    public void setName (String name) {
        this.name = name;
    }

    public String getName (){
        return name;
    }

    public String getCode (String name) {
        //Get code:
        //Split Function
        String[] words = name.split("\\s+");
        String code = "";
        for (int i=0; i < words.length; i++) {
             code = code + words[i].charAt(0);
             code = code.toUpperCase();
        }
        return code;
    }
}

我正在打砖墙,如何使程序动态化,以显示每个演员的整部电影。 这是一个大学辅导,我也需要在某些时候做一个深刻的阵列副本。 我对OO几乎是全新的,所以这对我来说是一个棘手的任务。

任何建议或正确方向的观点都将受到极大的赞赏。

关于你班级的两条评论......

  1. 为什么不宣布像这样的演员的电影:

    private List<Film> myFilms = new ArrayList<Film>();

    这样,您就可以从actor对象中添加和删除电影对象引用。 例如,您可以为列表实现getter和setter,并从外部对其进行操作。 列表(或一般的集合)比原始数组更容易操作。

  2. 考虑用第一个大写字母来声明类,这是一个约定。 例如: ActorFilm

考虑将“在电影中扮演的角色”提取到另一个班级,将电影与演员分离(演员也可以做眼镜,vioce dubbig等,而不是特定的电影。)

class ActorRole {
   private Actor actor;
   private Movie movie;
   private int dollarsSallary;
   private int scenesPlayed;
   // etc.
}

如果你不想,我几乎可以肯定, 从电影到演员比从演员到电影更好地创造依赖 ,因为电影几乎肯定有actos:

class Movie {
  private List<Actor> actors = new ArrayList<Actor>();
}

这使得统计演员统计数据变得更加困难(你必须遍历所有电影),但我认为这是一个更好的设计。

计算单个演员表演:

for ( Movie movie : listOfAllMovies ) {
   if ( movie.getActors().contains( myActor ) ) { // read about equals() in Java !
     timesPlayed++;
   }
}

如果你想为更多演员制作排名,可以使用Map<Actor,Integer>将演员映射到他们玩过的计时器。

这可能是一个漫长的操作,所以你可以考虑兑现结果(如上图所示) - 解决方案可以是map,ActorStatistics类,actor中的简单timesPlayed字段等。

不要害怕物体

不要做一个困难的解决方法来将电影转换成id(就像你的id ,它可以与你的电影代码String相连,添加另一个类型不兼容的问题。尝试使用更多的对象引用而不是变通方法,而不是使用List而不是数组。

通常,请阅读Java中的集合 ,如ArrayListHashMap ,并重写equals()hashCode() ,以及一般OOP 单一责任原则类内聚

您可以在class actor组合自动增量容器,如vector ArrayList等。 或者您可以自己实现动态数组。

如果你有一个包含用户名和电影(ID)等的表的数据库,你可以创建一个类如下,

Class Film{

private String actorName;

private String filmCode;

private String filmName;

....getter & setter methods
...
}

那么你可以创建一个方法来获取Film类的数据列表。 例如:

List<Film> filmList = new ArrayList<Film>();
String actorName = "Arnold";
filmList = dbCon.getFilmListByActor(actorName);

你的getFilmListByActor方法应该是这样的,

public List<Film> getFilmListByActor(String actorName){

List<Film> filmList = new ArrayList<Film>();
//Query for get film list by actor
 //assigne filmList to result set
enter code here
 return filmList; 

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM