Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - правильность написания кода

Показать результаты: что лучше учить
awt 1 25.00%
swing 1 25.00%
javaFX 2 50.00%
Всего проголосовало: 4. Вы не можете голосовать в этой теме

Ответить
Настройки темы
Java - правильность написания кода

Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1


Конфигурация

Профиль | Отправить PM | Цитировать


Здравствуйте. Интересует правильно ли я пишу код. Выучил ООП и сейчас перехожу к изучению awt, swing и javaFX. Быстро накидал простенькую прожку. Хотелось знать мнение по поводу составления кода .
главный класс

Код: Выделить весь код
package square;

import square.Triangle;

public class Square {

    public static void main(String[] args) {
        Triangle triangle = new Triangle(3, 4, 5);
        triangle.squareOut();
    }
}

клас с методамы и конструктором

Код: Выделить весь код
package square;

public class Triangle {

    private int aSide;
    private int bSide;
    private int cSide;
    private double square;
    private double perimeter;

    public Triangle(int aSide, int bSide, int cSide) {
        this.aSide = aSide;
        this.bSide = bSide;
        this.cSide = cSide;
    }

    private void print(String str) {
        System.out.println(str);
    }

    public void square() {
        perimeter = (aSide + bSide + cSide) / 2;
        square = Math.sqrt(perimeter * (perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide));
    }

    public void squareOut() {
        this.square();
        print("Площадь треугольника равна " + square);
    }
}

Отправлено: 11:28, 24-04-2015

 

Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Код как код. Не обременен комментариями, не выполняет каких-либо сверх задач, содержит ошибку вычисления при реализации прямоугольного треугольника.
На мой взгляд процедура public void squareOut() { ... } лишняя.
Я не люблю, когда за меня думает процедура. Т.е. я сам решу, какой текст следует писать, и нужен ли он мне вообще.
Из более грубых ошибок - отсутствие проверки треугольника. Т.е. нельзя в планиметрии получить треугольник со сторонами 1, 1, 6.
А в этой программе можно. Тоже касается и отрицательных величин.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:21, 24-04-2015 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Т.е. нельзя в планиметрии получить треугольник со сторонами 1, 1, 6.
А в этой программе можно. Тоже касается и отрицательных величин. »
Неевклидовость. Антивселенная. .

Отправлено: 13:32, 24-04-2015 | #3


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Код как код. Не обременен комментариями, не выполняет каких-либо сверх задач, содержит ошибку вычисления при реализации прямоугольного треугольника.
На мой взгляд процедура public void squareOut() { ... } лишняя.
Я не люблю, когда за меня думает процедура. Т.е. я сам решу, какой текст следует писать, и нужен ли он мне вообще.
Из более грубых ошибок - отсутствие проверки треугольника. Т.е. нельзя в планиметрии получить треугольник со сторонами 1, 1, 6.
А в этой программе можно. Тоже касается и отрицательных величин.
»

Благодарю за ответ. Комментарии писать буду, а то я забываю что кроме меня еще кто то будет его читать. Насчет правил планиметрии так сказать "проверку на дурака" я не писал... просто хотел по быстрому накидать прожку. Сегодня допишу с учетом всех ошибок и скину сюда. Интересовало мнение насчет построения класса, методов, конструктора. Благодарю за критику. Если вы не против то по мере изучения я буду сливать сюда коды. Хотелось бы видеть от вас критику по их поводу. Мне кажется просто что так я научусь писать более менее нормальный код.

Отправлено: 14:04, 24-04-2015 | #4


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Еще можно ли использовать геттеры и сеттеры? А то много негативного о них в интернете написано... Или их использование будет дурным тоном?

-------
________________________________________________________
Ты - то что ты ешь. Ешь людей - будь человеком


Отправлено: 16:40, 24-04-2015 | #5


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


В "интернетах" много что пишут. Если специфика работы объекта подсказывает использования сеттера или геттера - то вполне.
Если сеттер и геттер "поганит" данные и вызывает неявное/непредсказуемое действие - тогда это проблема.
nomad____1, setter и getter - это инструмент. Пользоваться им или нет - решать не мне.
В данном случае в процедуру установки параметров можно прописать процедуру установки флага "валидности" треугольника.
Тогда в процедуре вычисления площади будет проверяться условие планарности треугольника по флагу.
Моветон?
----
nomad____1, как вам сказать. Точность - вежливость королей. По таким мелочам судят о специалисте.
На счет построения конструктора класса и методов - сказать сложно. Ваш пример с одной стороны достаточно каноничен и в нем нет сложности, с другой оторван от реальности и практики.
Те же прямоугольные треугольники здесь не учитываются. Ответ будет дан с определенной погрешностью (кстати вопрос "на засыпку" как специалисту: какая погрешность метода при вычислении площади прямоугольного треугольника?).
Отсутствие условий планиметрии приведет к ошибке - вычислению корня из отрицательного числа (NaN).
----
Iska, а вот интересно. Допустим у нас некая выпуклая фигура, на плоскости которой я могу нарисовать треугольник со сторонами 1:1:6. И ... наверно собственно все. По данным сторонам я не смогу сказать какая это фигура? Допустим шар, сфера.
Наверно нет.
Получится у меня должны (пусть катеты) две стороны лежать на прямых плоскостях, а гипотенуза в 6 ед. должна быть свернута в гармошку.
Так что ли?

----
P.S. Не стоит без особой надобности выделять текст жирным шрифтом.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:00, 24-04-2015 | #6


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


валидность треугольника УЧТЕНО И ДОРОБОТАНО
Цитата lxa85[I:
]В данном случае в процедуру установки параметров можно прописать процедуру установки флага "валидности" треугольника.
Тогда в процедуре вычисления площади будет проверяться условие планарности треугольника по флагу.[/i] »
Сделал. Не знаю так ли как Вы написали.
Код: Выделить весь код
//      Проверка планарности треугольника       
            if ((aSide + bSide) > cSide && (aSide + cSide) > bSide && (bSide + cSide) > aSide) {
//                Вычисление площади

точность УЧТЕНО
Цитата lxa85:
Точность - вежливость королей. По таким мелочам судят о специалисте. »
Программу буду улучшать по мере изучения

учтено. программу буду улучшать по мере изучения
Цитата lxa85:
Ваш пример с одной стороны достаточно каноничен и в нем нет сложности, с другой оторван от реальности и практики. »

Цитата lxa85:
Те же прямоугольные треугольники здесь не учитываются. Ответ будет дан с определенной погрешностью (кстати вопрос "на засыпку" как специалисту: какая погрешность метода при вычислении площади прямоугольного треугольника?).
Отсутствие условий планиметрии приведет к ошибке - вычислению корня из отрицательного числа (NaN).
»
Вы сами дали ответ на свой вопрос) точность! в прямоугольном треугольнике площадь равна (а*b)/2 ... очень высокая точность!) А вот вычисление квадратного корня с числа например 2 или 3....)

Тут уже вопрос как заставить ее работать... У меня выводит 0. Так как не может вычислить целый квадратный корень.

Цитата lxa85:
P.S. Не стоит без особой надобности выделять текст жирным шрифтом. »
Это чисто для себя. Так сказать "вопрос-ответ". Выделение своих сообщений (вопросов). Для более простейшей навигации.

Вот код после доработки:
главный класс
package square;
Код: Выделить весь код
public class Square {

    public static void main(String[] args) {
        Triangle triangle = new Triangle(2, 5, 6);
        triangle.squareOut();
    }
}

Класс с методами и конструктором
package square;
Код: Выделить весь код
public class Triangle {

    private int aSide;
    private int bSide;
    private int cSide;
    private double square;
    private double perimeter;
    private int vuvod;

    public Triangle(int aSide, int bSide, int cSide) {
        this.aSide = aSide;
        this.bSide = bSide;
        this.cSide = cSide;
    }

    private void print(String str) {
        System.out.println(str);
    }

//    
//      Проверка "на дурака" введенных значение и вычисление площади
//        
    public void square() {
//       Проверка нет ли стороны с отрицательным значением или равным нулю 
        if (aSide <= 0 || bSide <= 0 || cSide <= 0) {
            vuvod = 1;
        } else {
//      Проверка планарности треугольника       
            if ((aSide + bSide) > cSide && (aSide + cSide) > bSide && (bSide + cSide) > aSide) {
//                Вычисление площади
                perimeter = (aSide + bSide + cSide) / 2;
                square = Math.sqrt(perimeter * (perimeter - aSide) * (perimeter - bSide) * (perimeter - cSide));
                vuvod = 2;
            } else {
//      Когда данные числа не могут соответствовать длине сторон треугольника     
                vuvod = 3;
            }
        }
        if (square == 0) {
            vuvod = 0;
        }
    }

// 
// Вывод значения на экран   
//    
    public void squareOut() {
        this.square();
        switch (vuvod) {
            case 1:
                print("Длинна не может быть отрицательным числом");
                break;
            case 2:
                print("Площадь треугольника равна " + square);
                break;
            case 3:
                print("У треугольника не может быть сторон с такими значениями");
                break;
            default:
                print("\tхм... что то не так с программой... Советую заглянуть в метод  square... \n\t Скорее всего программа не может добыть квадратный корень. ");
        }
    }
}


P.S.
Сегодня ночью думаю скину код где будет проверка треугольника на прямоугольность и вычисление площади по отдельной формуле. Думаю использовать сравнение трех сторон. Две самые "мелкие" должны быть катетами. Дальше с помощю теоремы Пифагора проверить будет ли получена гипотенуза равна "нашей" введеной. пока мой извращенный мозг более простого не придумал)))

P.P.S.
Надеюсь етот смайл пробет стенку головой)

Последний раз редактировалось nomad____1, 26-04-2015 в 16:05.


Отправлено: 15:48, 26-04-2015 | #7


Аватара для User001

Ветеран


Сообщения: 740
Благодарности: 116

Профиль | Отправить PM | Цитировать


Цитата lxa85:
Допустим у нас некая выпуклая фигура, на плоскости которой я могу нарисовать треугольник со сторонами 1:1:6. И ... наверно собственно все. По данным сторонам я не смогу сказать какая это фигура? Допустим шар, сфера. Наверно нет. »
Жуть.
А по теме мои 5 копеек:

Цитата nomad____1:
private int vuvod; »
Поменяйте название переменной.
Цитата nomad____1:
case 1: »
Цитата nomad____1:
case 2: »
Если так и пойдет дело, потом тяжело будет угадывать что это за магические константы.
Цитата nomad____1:
public void square() { »
Цитата nomad____1:
public void squareOut() »
Лучше это переделать. Как вариант, square возвращает площадь или что-то в этом роде. В вашем случае непонятно зачем square() public.
Цитата nomad____1:
vuvod = 0; »
Его в switch нет.
Цитата nomad____1:
Длинна не может быть отрицательным числом»
Бросается в глаза.
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:56, 26-04-2015 | #8


Аватара для nomad____1

Пользователь


Сообщения: 79
Благодарности: 1

Профиль | Отправить PM | Цитировать


Цитата User001:
vuvod = 0; »
Его в switch нет.
Цитата nomad____1:
Длинна не может быть отрицательным числом»
»
если я правильно понял то 0 это дефолтное значение.
Цитата User001:

Цитата nomad____1:
case 1: »
Цитата nomad____1:
case 2: »
Если так и пойдет дело, потом тяжело будет угадывать что это за магические константы.
»
Это да косяк. Забываю. С СИ начинал учить программирование.

Насчет неправильного вывода то разобрался что нужно поменять типы данных переменных в которые записываются длинны сторон на флоаты или даблы.

Последний раз редактировалось nomad____1, 26-04-2015 в 19:13.


Отправлено: 17:32, 26-04-2015 | #9


Аватара для lxa85

Необычный


Contributor


Сообщения: 4463
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


nomad____1, касательно public'ов, static'ов и пр. я не скажу. Но переменная vuvod у меня вызывает подозрения.
Почему используется конструкция public void SquareOut.
Почему не int или не double ?
Я от программы хочу получить ответ. Желательно наиболее простой и пригодный для "дальнейшей эксплуатации".
Мне совершенно не хочется заниматься парсингом строки (притом не возвращаемой в силу void).
Чтобы сигнализировать об ошибке следует возвращать отрицательные значения. -1, -2 и т.д.
Поведение разумеется должно быть описано в сопровождающей документации и в комментариях к процедуре.
----
Цитата nomad____1:
Сделал. Не знаю так ли как Вы написали. »
Нет. Я сказал написать проверку в процедуре установки параметров, а не в процедуре вычисления площади.
Напомню, речь шла про сеттеры, гетторы и ввод "флага валидности" треугольника.
----
Цитата nomad____1:
Две самые "мелкие" должны быть катетами »
А вдруг нет? Вдруг "мелкие" не катят?!!

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 19:20, 26-04-2015 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Java - правильность написания кода

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Правильность замены процессора Вилка Хочу все знать 9 07-05-2015 00:08
C/C++ - Лабораторные работы ( проверка написания кода ) xasn0w Программирование и базы данных 3 06-05-2015 21:47
Правильность конфигурации Leoz Выбор отдельных компонентов компьютера и конфигурации в целом 9 06-09-2009 22:15
правильность конфигурации belomor3000 Выбор отдельных компонентов компьютера и конфигурации в целом 5 15-09-2008 11:11
Правильность работы сети DimSher Сетевые технологии 5 18-02-2003 13:53




 
Переход