Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
1

Изучение инкапсуляции и абстракции

19.01.2018, 14:40. Показов 1154. Ответов 24
Метки нет (Все метки)

Всем доброго вечера у меня очередная лабораторка.
Завдання.
Створити на мові Java клас, який описує поняття реального світу згідно з варіантом завдання. Клас повинен мати не менше 5 полів, що описують властивості даного поняття та не менше 3 методів, які описують його поведінку. Методи повинні працювати з полями, читати або записувати їх; всі поля повинні бути задіяні в методах. Імена полів повинні починатись з іменника або прикметника, методів – з дієслова. Створити програму, яка створює вікно з чотирма кнопками. При натисненні на першу кнопку повинен створитись об’єкт нашого класу, при натисненні на кожну з інших кнопок повинен запускатись відповідний метод нашого класу.
Варіанти (поняття реального світу для створення класу).
1. Кнопка на клавіатурі.

Все что я пока осилил это:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import javax.swing.*;
 
public class Start {
 
    public static void main(String[] args) {
        //создаю фрейм для размещения элементов
        JFrame frame = new JFrame("ЗПЗ-164 Асанов С.В. Лабораторна №2");
        frame.setSize(400,200);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        Panel panel = new Panel();
        Button button = new Button();
        frame.add(panel);
        panel.add(button);
 
    }
}
И еще пара конструкторов.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import javax.swing.*;
 
class Panel extends JPanel {
    Panel (){
        setLayout(null);
    }
}
 
import javax.swing.*;
 
class Button extends JButton{
 
    Button(){
        setBounds(175,140,50,50);
    }
}
В каком направлении дальше двигаться.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.01.2018, 14:40
Ответы с готовыми решениями:

Абстракции
Мои работы в стиле абстракций. Работа выполненная несколько месяцев назад.

Неопределенность в абстракции
Добрый день. Есть класс A от которого производится класс В и С. У этих классов есть общий...

Entity Framework и абстракции
Можно сказать "новичковый" вопрос :) Есть сущности, созданные из базы данных. Database First. К...

Задачка с использованием абстракции
Добрый день! подскажите(объясните:)) пожалуйста, что еще необходимо сделать с данной задачей с...

24
6034 / 2151 / 750
Регистрация: 10.12.2010
Сообщений: 5,998
Записей в блоге: 3
19.01.2018, 14:58 2
В направлении перевода условия задачи на русский.
0
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
19.01.2018, 15:19  [ТС] 3
Создать класс, который будет описывать действия реального мира. Класс должен иметь не меньше 5 полей и 3 методов которые будут описывать его поведение. Создать программу которая создаст окно с 4 кнопками. При нажатии на первую кнопку должен создать объект нашего класса, при нажимании на другие кнопки, должен запускать соответствующие методы класса.
0
Эксперт Java
3338 / 2773 / 853
Регистрация: 05.07.2013
Сообщений: 13,305
19.01.2018, 15:41 4
осиливай дальше https://docs.oracle.com/javase... index.html
1
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
19.01.2018, 16:49  [ТС] 5
хотел бы попросить посмотреть правильность созданного класса с методами. Чем отличаются два нижних метода

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class Button {
    //несколько полей класса Button
    String name;
    int size;
    String coloure;
 
    //тут находится конструктор класса Button
    public Button(String startName, int startSize, String startColoure){
        name = startName;
        size = startSize;
        coloure = startColoure;
    }
 
    //Тут находятся методы класса Button
    public void setName(String newName){
        name = newName;
    }
    
    public void setSize(int newSize){
        size = newSize;
    }
    // этот метод я писал в ручную
    public void setColoure(String newColoure){
        coloure = newColoure;
    }
    
    /* конкретно этот метод мне предложила ИДЕ
    public void setColoure(String coloure) {
        this.coloure = coloure;
    }*/
}
0
Йуный падаван
Эксперт PythonЭксперт Java
9465 / 5554 / 1871
Регистрация: 21.10.2017
Сообщений: 14,623
19.01.2018, 17:11 6
ASanovS, в данном случае, ничем. В твоём методе имена аргумента и поля различаются, а в предложенном IDE, совпадают. Ключевое слово this указывает на поле объекта, а не на переданный аргумент.
0
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
19.01.2018, 17:22  [ТС] 7
iSmokeJC, т.е. с этим работать можно хоть я и коряво его написал.
0
Йуный падаван
Эксперт PythonЭксперт Java
9465 / 5554 / 1871
Регистрация: 21.10.2017
Сообщений: 14,623
19.01.2018, 17:35 8
ASanovS, ну почему же коряво? Главное, чтоб ты понял, в чем суть.
0
Автоматизируй это!
Эксперт Python
5049 / 3517 / 1004
Регистрация: 30.03.2015
Сообщений: 10,764
Записей в блоге: 29
19.01.2018, 19:22 9
ASanovS, а где же инкапсуляция? и комментарии избыточны

Добавлено через 45 секунд
Цитата Сообщение от ASanovS Посмотреть сообщение
coloure
это color имеется в виду?
0
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
25.01.2018, 23:03  [ТС] 10
Welemir1, да опечатка по незнанию англ. языка. продвижение есть и ИДЕА мне в помощь, но все равно не могу понять одну вещь, почему когда хочу создать объект по классу button не могу этого сделать, чего не дописываю никак не въеду.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
public class Button{
    //несколько полей класса Button
    String name, coloure;
    int size;
    boolean click;
 
    //тут находится конструктор класса Button
 
    public Button(String name, String coloure, int size, boolean click) {
        this.name = name;
        this.coloure = coloure;
        this.size = size;
        this.click = click;
    }
 
    //Тут находятся методы класса Button
    public void setName(String name) {
        this.name = name;
    }
 
    public void setColoure(String coloure) {
        this.coloure = coloure;
    }
 
    public void setSize(int size) {
        this.size = size;
    }
 
    public void setClick(boolean click) {
        this.click = click;
    }
 
    @Override
    public String toString() {
        return "Button{" +
                "name='" + name + '\'' +
                ", coloure='" + coloure + '\'' +
                ", size=" + size +
                ", click=" + click +
                '}';
    }
}
Миниатюры
Изучение инкапсуляции и абстракции  
0
Автоматизируй это!
Эксперт Python
5049 / 3517 / 1004
Регистрация: 30.03.2015
Сообщений: 10,764
Записей в блоге: 29
26.01.2018, 08:03 11
Цитата Сообщение от ASanovS Посмотреть сообщение
чего не дописываю никак не въеду.
ИДЕ тебе конкретно пишет чего не дописываешь! ты же создал конструктор с 4-мя параметрами, а объект создать пытаешься с одним! Цвет, размер и клик допиши!

Еще раз повторяю свой вопрос - где инкапсуляция? ты прочел про нее? зачем геттеры и сеттеры, если твои поля доступны в пределах пакета?
0
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
26.01.2018, 13:44  [ТС] 12
Цитата Сообщение от Welemir1 Посмотреть сообщение
если твои поля доступны в пределах пакета
понимание того что я тормоз меня огорчает.
решил сделать все совсем просто и снова тот же тупик.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Button {
    private String name;
 
    public Button(String name) {
        this.name = name;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    @Override
    public String toString() {
        return "Button{" +
                "name='" + name + '\'' +
                '}';
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import javax.swing.*;
import java.awt.*;
 
public class Main {
    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setLayout(new GridLayout());
        frame.setSize(400,200);
        JPanel panel = new JPanel();
        panel.setLayout(null);
        Button button = new Button("Button");
        frame.add(panel);
        panel.add(button);//Cannot resolve method 'add(Button)'
    }
}
0
Йуный падаван
Эксперт PythonЭксперт Java
9465 / 5554 / 1871
Регистрация: 21.10.2017
Сообщений: 14,623
26.01.2018, 16:41 13
ASanovS,
Java
1
public class Button extends JButton{
Профит
0
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
30.01.2018, 22:46  [ТС] 14
Продолжение следует. Ребят подскажите, что мне нужно добавить в ActionListener кнопки, чтоб создался новое окно фрейма.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class Start {
 
    public static void main(String[] args) {
 
        JFrame frame = new JFrame("Лаборатона №2 Асанов С.В. ЗПЗ-164");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(360,170);
 
        //Создание описаний кнопок
        JLabel label = new JLabel("Add name Escape ");
        JLabel label1 = new JLabel("Add size 100*50");
        JLabel label2 = new JLabel("Add color Gray");
        JLabel label3 = new JLabel("Create btn");
        label.setBounds(200,10,220,30);
        label1.setBounds(200,50,220,30);
        label2.setBounds(200,90,220,30);
        label3.setBounds(200,130,220,30);
 
        //создание панели
        JPanel panel = new JPanel ();
        panel.setLayout(null);
        frame.add(panel);
        panel.add(label);
        panel.add(label1);
        panel.add(label2);
        panel.add(label3);
 
        //Создание кнопок
        Button btn = new Button("Add name",50,"Gray");
        Button btn1 = new Button("Add size",50,"Gray");
        Button btn2 = new Button("Add color",50,"Gray");
        Button btn3 = new Button("Create btn",50,"Gray");
        btn.setBounds(40,10,150,30);
        btn1.setBounds(40,50,150,30);
        btn2.setBounds(40,90,150,30);
        btn3.setBounds(40,130,150,30);
        panel.add(btn);
        panel.add(btn1);
        panel.add(btn2);
        panel.add(btn3);
 
        //Добавление слушателей ActionListener к кнопкам
        btn.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                
            }
        });
 
        btn1.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
 
            }
        });
 
        btn2.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
 
            }
        });
 
        btn3.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
 
            }
        });
 
    }
}
0
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
06.02.2018, 17:53  [ТС] 15
Где я потерял логику, мне нужно чтобы первый слушатель добавлял +1 в переменную z, а второй слушатель -1 с переменной z.
результат получается такой, что у каждого своя переменна z

Громкость увеличина на: 1
Теперь громкость: 1
Громкость увеличина на: 1
Теперь громкость: 2
Громкость уменьшена на: 1
Теперь громкость: -1

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
class ButtonTest extends JButton{
    private int x,y,z;
    private String name;
 
    public ButtonTest(int z,int x, int y, String name) {
        super(name);
        this.z = z;
        this.x = x;
        this.y = y;
        this.name = name;
    }
 
    public void setX(int x) {
        this.x = x;
    }
 
    public void setY(int y) {
        this.y = y;
    }
 
    public void setZ(int z) {
        this.z = z;
 
    }
 
 
    public void setName(String name) {
        this.name = name;
    }
 
    public void volumeUp() {
        setZ(z+x);
        System.out.println("Громкость увеличина на: " + x);
        System.out.println("Теперь громкость: " + z);
    }
 
    public void volumeDown(){
        setZ(z-y);
        System.out.println("Громкость уменьшена на: " + y);
        System.out.println("Теперь громкость: " + z);
 
    }
 
    @Override
    public String toString() {
        return "ButtonTest{" +
                "x=" + x +
                ", y=" + y +
                ", z=" + z +
                ", name='" + name + '\'' +
                '}';
    }
}
 
public class Start {
 
    public static void main(String[] args) {
        JFrame frame = new JFrame("TestFrame");
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(400,200);
 
        JPanel panel = new JPanel();
        panel.setLayout(null);
        frame.add(panel);
 
        JTextArea tA = new JTextArea();
        tA.setBounds(100,10,200,100);
        panel.add(tA);
 
 
        ButtonTest btnUp = new ButtonTest(0,0,0,"Up");
        btnUp.setBounds(10,10,80,30);
        panel.add(btnUp);
        btnUp.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                btnUp.setX(1);
                btnUp.volumeUp();
 
            }
        });
 
        ButtonTest btnDown = new ButtonTest(0,0,0,"Down");
        btnDown.setBounds(10,50,80,30);
        panel.add(btnDown);
        btnDown.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                btnDown.setY(1);
                btnDown.volumeDown();
 
            }
        });
    }
}
0
Йуный падаван
Эксперт PythonЭксперт Java
9465 / 5554 / 1871
Регистрация: 21.10.2017
Сообщений: 14,623
06.02.2018, 18:17 16
ASanovS, все правильно, у btnDown своя переменная z. Вот ты ее с 0 и уменьшаешь в методе volumeDown. Получается -1
0
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
06.02.2018, 18:22  [ТС] 17
iSmokeJC, я наверное неправильно выразил свою мысль, мне нужно, чтоб оба слушателя работали с одной и той же переменной z, одни увеличивал ее значение, а второй уменьшал.
0
Йуный падаван
Эксперт PythonЭксперт Java
9465 / 5554 / 1871
Регистрация: 21.10.2017
Сообщений: 14,623
06.02.2018, 18:34 18
ASanovS, я твою идею как раз прекрасно понял. И еще раз говорю - здесь у каждой кнопки СВОЯ переменная z. Создай отдельный класс, например, Volume, в нем создай поле z, методы volumeUp(int x) и volumeDown(int x) и передавай им значения из обработчиков твоих кнопок!

Добавлено через 8 минут
Ну или на худой конец прям в классе Start
1
0 / 2 / 0
Регистрация: 27.02.2017
Сообщений: 101
06.02.2018, 19:06  [ТС] 19
iSmokeJC, Спасибо помогло, решение получилось таким. В слушатели просто добавил экземпляр класса с нужным методом.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
static class Volume {
        private int z;
        public Volume(int z) {
            this.z = z;
        }
        public void setZ(int z) {
            this.z = z;
        }
        public void volumeUp(){
            setZ(z+1);
        }
        public void volumeDown(){
            setZ(z-1);
        }
    }
0
Йуный падаван
Эксперт PythonЭксперт Java
9465 / 5554 / 1871
Регистрация: 21.10.2017
Сообщений: 14,623
06.02.2018, 19:15 20
ASanovS, во! Но, на мой взгляд, лучше передавать в методы значения, на сколько увеличивать/уменьшать громкость. И сеттер ни к чему...

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Volume {
    private int value;
 
    public Volume(int value) {
        this.value = value;
    }
 
    public int getValue() {
        return value;
    }
 
    public void volumeUp(int x) {
        value += x;
    }
 
    public void volumeDown(int x) {
        value -= x;
    }
}
В main
Java
1
2
3
4
5
6
Volume mainVolume = new Volume(0);
//....
// в обработчиках
mainVolume.volumeUp(20);
mainVolume.volumeDown(10);
System.out.println(mainVolume.getValue());
0
06.02.2018, 19:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2018, 19:15

Абстракция, уровни абстракции
Как понять это? Может кто-нибудь объяснить более доступным и понятным языком нежели википедия?

Права доступа, уровень абстракции
Использую Asp.net 4, в качестве провайдера доступа использую пока свой, похожий на membership. В...

Написать код программы (Абстракции)
Всем доброго времени суток. Имеется одна задача, которую я не могу решить в течении недели. ...

Сложность абстракции, полиморфизм, дублирование и другие
//структура "матрица" //Представляет собой обёртку над двухмерным массивом template<typename...

Какие есть свойства и множества абстракции
Здравствуйте, не могли бы Вы помочь с ответом на следующий вопрос: Абстракция множество. Свойства. ...

Параметризация и предотвращение ошибок. Отметьте абстракции
Отметьте абстракции, которые целесообразно моделировать с помощью универсальных классов. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru