增加了简单java程序的内聚性



我有一个小java程序,它收集用户写的10个单词,并按指定的顺序打印它们。就目前而言,这个程序是有效的,但它并不具有凝聚力。

我的问题源于对内聚的概念不够了解,无法解决这个问题,同时我也是Java/OO语言的新手。

我认为Entry类太混乱了,应该由另一个类来承担这个类的一些功能。

任何提示或线索,神秘或其他将非常感激!

dialog .java中缺少输入读取器是有意为之,因为原始代码使用专有代码。

这是三个类:输入、对话和打印机。

Entry.java

public class Entry {
    public static void main(String[] args){
        String[] wordArray = new String[10];
        Dialogue d = new Dialogue(); 
        wordArray = d.read(wordArray); 
        Printer p = new Printer(); 
        p.printForwards(wordArray); 
        p.printBackwards(wordArray); 
        p.printEveryOther(wordArray); 
    }
}

Dialogue.java

public class Dialogue {
    public String[] read(String[] s){ 
            String[] temp; 
            temp = new String[s.length]; 
            for(int i=0;i<s.length;i++){
                String str = anything that reads input("Enter word number" + " " + (i+1));
            temp[i] = str;     
            } 
        return temp; 
    }
}

Printer.java

public class Printer {
    public void printForwards(String[] s){
        System.out.println("Forwards:");
        for(int i=0;i<s.length;i++){
            System.out.print(s[i] + " ");
            if(i==s.length-1){
                System.out.println("");
            }
        }
    }
    public void printBackwards(String[] s){
        System.out.println("Backwards:");
        for(int i=s.length-1;i>=0;i--){
            System.out.print(s[i]+ " ");
            if(i==0){
                System.out.println("");
            }
        }
    }
    public void printEveryOther(String[] s){
        System.out.println("Every other:");
        for(int i = 0; i < s.length; i++){
            if(i % 2 == 0){
                System.out.print(s[i] + " ");
            }
        }
    }
}// /class

总体上看起来不错,事实上这是一个非常简单的任务,而OOP更适合于更复杂的程序。话虽如此,这里有一些提示/例子。

你也可以做你的打印更OOP风格。这样做的目的是构建可重用的模块化代码。我们通过将String数组操作(之前存在于Printer类中)抽象到它自己的类来实现这一点。

这也非常类似/也称为松耦合。我们通过拆分字符串处理功能和打印功能来实现松耦合。

把你的Printer类改成StringOrderer或者类似的东西:

public class StringOrderer {
    private String[] array;
    public class StringOrderer(String[] array) {
         this.array = array;
    }
    public String[] getArray() {
        return array;
    }
    public String[] everyOther(){
        String[] eos = new String[array.length];
        for(int i = 0; i < s.length; i++){
            if(i % 2 == 0){
                eos[eos.length] = s[i];
        }
        return eos;
    }
    public String[] backwards() {
    ...

然后在主类中添加如下方法:

private static void printStringArray(String[] array) {
     for (int i=0; i<array.length; i++) {
         System.out.print(array[i]);
     }
}

然后在主方法中调用它:

StringOrderer s = new StringOrderer(wordArray);
System.out.println('Forward:');
printStringArray(s.getArray());
System.out.println('Every other:');
printStringArray(s.everyOther());
System.out.println('Backwards:');
... 

额外提示-你也可以在你的主类中添加方法,像这样:

public class Entry {
    public static void main(String[] args){
        String[] wordArray = readWordArray()
        Printer p = new Printer(); 
        p.printForwards(wordArray); 
        p.printBackwards(wordArray); 
        p.printEveryOther(wordArray); 
    }

    private static String[] readWordArray() {
        Dialogue d = new Dialogue(); 
        return d.read(new String[10]); 
   }
}

最新更新