Правильна ли структура / порядок моего кода в соответствии с API / UML? - PullRequest
1 голос
/ 11 ноября 2019

Вот API / UML, которому я должен следовать.

enter image description here

А вот мой код.

public class NLP 
{
    private String[] data;

    public NLP()  //or "public NLP(String[] data)"???
    {
    // IF public NLP(String[] data), then
    //this.data = data; ??? 
    ... 
    }
    public int countOccurrences(String word)
    {   
    ...
        return count;   
    }
    public String[] getStems(int len)
    {
        ...return data; //???
    }
    //For testing
    //public static void main(String[] args)
    //{
    //}
}

Iя не уверен, должен ли мой конструктор быть public NLP(String[] data) или public NLP(). Если вместо этого public NLP(String[] data) должен быть моим конструктором, может кто-нибудь объяснить мне, почему существует два (String[] data)?


Вот мой законченный код. Не стесняйтесь проверять и давать отзывы. Спасибо.

public class NLP 
{
    private String[] data;


    public NLP(String[] data)
    {
        this.data = data;       
    }

    public int countOccurrences(String word)
    {
        int count = 0;
        for (int i = 0; i < data.length; i++)
        {
            if (word.equals(data[i]))
            {
                count = count + 1;
            }           
        }
        StdOut.println(word + ": " + count);
        return count;
    }

    public String[] getStems(int len)
    {
        for (int i = 0; i < data.length; i++)
        {
            String s = data[i];
            if (len >= data[i].length())
            {
                data[i] = s;
                StdOut.println(data[i]);
            }
            if (len < data[i].length())
            {
                data[i] = s.substring(0, len);
                StdOut.println(data[i]);
            }
        }return data;
    }
}

Ответы [ 2 ]

1 голос
/ 11 ноября 2019

Предполагается, что конструктор включает в себя аргумент (т.е. public NLP(String[] data)), как показано в описании API, поэтому, на мой взгляд, ваша реализация (как указано в нижней части вопроса) просто в порядке.

Однако я думаю, что ваш общий вопрос о том, как связаны конструктор и внутренние данные вашего класса:

Данные (или состояние) классахранится в одной или нескольких переменных (иногда их также называют членов , полей или атрибутов ) - в вашем случае String[] data. Общая концепция объектно-ориентированного программирования состоит в том, чтобы сохранять члены частными и получать к ним доступ только через методы открытого интерфейса (такие как методы получения и установки). Это известно как инкапсуляция .

Конечно, также возможно определение конструктора без аргумента, но он может инициализировать класс только с некоторыми фиксированными значениями. В вашем случае намерение состоит в том, чтобы инициализировать внутренний элемент data с аргументом, передаваемым конструктору (который также называется data).

Наконец, многие языки программирования (включая Java) допускают перегрузку конструкторов, поэтому вы можете, например, иметь один конструктор с аргументами, а другой - без аргументов. Вот полезное введение.

1 голос
/ 11 ноября 2019

На диаграмме классов UML средняя часть (в вашем случае, с "- String [] data") содержит поля класса, а нижняя часть (с "+ NLP (String [] data)")содержит методы классов, технически одним из которых является конструктор. Вот краткий справочник , который мне очень нравится.

Таким образом, может показаться, что ваш конструктор должен быть public NLP(String[] data), и внутри него вы установите this.data = data.

...