Новичок в Java, помогите преобразовать этот метод в класс.Чрезмерная зависимость от основного метода - PullRequest
0 голосов
/ 14 сентября 2010

Позвольте мне начать с того, что я новичок в программировании на Java. Я закодировал что-то, что работает так, как я хочу. Тем не менее, это не очень хорошо написано.

Вот мой код:

import java.lang.Math;

public class Advisor_Score {

    public static void main(String[] args){

        double p1_1[] = {101,1,1,1.5,.5};
        double p1_2[] = {101,2,2.5,2,4};
        double p2_1[] = {102,1,5,5,5,5,5,5,5};
        double p2_2[] = {102,2,2,5,3,4,5,1.5,2.5,5};

        //These arrays represent individual users. The first value in the array is their customer number and the second is domain.
        double All_users[][]={p1_1,p1_2,p2_1,p2_2};

        //This is a 2-dimensional array takes into account all users.

        double[] sum = new double[All_users.length];
        double[] raw_advisor = new double[All_users.length];
        double[] advisor_score = new double[All_users.length];
        for (int i=0;i<All_users.length;i++){
            for(int j=2;j<All_users[i].length;j++){
                    sum[i]+=All_users[i][j];
            }

            raw_advisor[i]=((sum[i]-(3*(All_users[i].length-2)))/4);
            advisor_score[i]= 2.5+(2.5*(1-Math.pow(Math.E, -.5*raw_advisor[i])));
            System.out.print("Customer ID "+All_users[i][0]);
            System.out.print(", Domain "+All_users[i][1]);
            System.out.println(": "+advisor_score[i]);
        }   
    }   
}

Однако я явно полагаюсь на основной метод. Мне было интересно, может ли кто-нибудь помочь мне интегрировать больше методов и оптимизировать весь процесс. Заранее спасибо, еще раз прошу прощения. Я новичок в Java и программировании.

Ответы [ 3 ]

2 голосов
/ 14 сентября 2010

Несмотря на то, что он может быть небольшим, хорошей практикой может стать попытка сделать этот объект более ориентированным - вот возможное начало.

Первое, что предлагается, это ваш комментарий

// These arrays represent individual users.
// The first value in the array is their customer number and the second is domain.

Вы не говорите, каковы оставшиеся числа, но из других комментариев, которые я собираю, они являются своего рода оценкой.Это предполагает что-то вроде

public class CustomerDomain
{
    private int customerNumber;
    private int customerDomainID;
    private List<Double> scores = new ArrayList<Double>();

    public CustomerDomain(int number, int domainID)
    {
        this.customerNumber = number;
        this.customerDomainID = domainID;
    }

    public void addScore(double score)
    {
        this.scores.add(score);
    }
    public List<Double> getScores()
    {
        return this.scores;
    }
}

Хотя в реальной жизни я, вероятно, не включил бы оценки в класс клиента.

1 голос
/ 14 сентября 2010

Эта конкретная программа, учитывая ее небольшой размер, я бы не реорганизовала. Создание ОО «Привет мир» пытается сделать лимузин из трехколесного велосипеда, IMO. В целом, хотя, когда я начинаю более крупный проект, я хочу проектировать с учетом концепций ОО.

На высоком уровне я пытаюсь представить себе «сущности», которые я буду строить, то есть конкретные «сотрудники», «абстрактные» действия и их отношения. Эти реальные сущности, как правило, становятся классами, которые ОО может очень хорошо моделировать с помощью наследования и других связанных концепций. Их отношения затем описываются интерфейсами, которые они выставляют - стараясь скрыть «внутренности» каждого объекта, чтобы не связывать все.

Более подробно, я идентифицирую «служебный» код, который могут использовать несколько частей моего приложения - это может стать статическим / глобальным вспомогательным классом.

Более подробно, внутри класса я пытаюсь ограничить функции / методы выполнением только одной цели, чтобы уменьшить побочные эффекты.

Конечно, я не всегда понимаю это правильно с первого раза. Тем не менее, создание больших и больших проектов помогает вам понять, когда определенные шаблоны проектирования работают, а когда - нет. Время, бюджет, технологии и т. Д., Все играют роль в принятии решений.

0 голосов
/ 14 сентября 2010

Это действительно небольшой объем кода, и если он работает, зачем его ломать?При этом прочитайте немного об объектно-ориентированной парадигме, а затем посмотрите на свою проблему, которую решает код, и подумайте, как он будет работать в этом контексте.В любом случае, хороший объектно-ориентированный дизайн, как правило, начинается с бумаги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...