1 / 1 / 0
Регистрация: 27.04.2013
Сообщений: 36
1

Абстрактный класс и его потомок

14.05.2013, 18:02. Показов 3393. Ответов 10
Метки нет (Все метки)

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

Я пока плохо понимаю принцип абстрактных классов и методов. Если метод абстрактный, то в нем же ничего нету, что бы он что то делал надо его переопределить в дочернем классе? Зачем в таком примере абстрактный метод если мы все равно его переопределяем?

Подскажите как организовать вывод работников по уменьшению з/п.

Вот некоторые наброски

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
package Abstract;
 
public abstract class Base {
 
    abstract double calculate(double FixedSalary);
 
    public static void main(String[] args) {
        Worker s1 = new Worker("Tom");
        
        System.out.println(s1.calculate(400));
 
    }
 
}

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
package Abstract;
 
public class Worker extends Base {
 
    private String name;
    private int id;
    private static int nextId = 1;
 
    public Worker(String n) {
        name = n;
        id = 0;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId() {
        id = nextId;
        nextId++;
    }
 
    @Override
    double calculate(double FixedSalary) {
        // расчет фиксированой зарплаты
        double AvarageSalary = 0;
        AvarageSalary = FixedSalary;
        return AvarageSalary;
 
    }
 
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2013, 18:02
Ответы с готовыми решениями:

Создать абстрактный класс Body и классы на его основе
Создать абстрактный класс Body. На его основе реализовать классы Parallelepiped (прямоугольный...

Создать абстрактный класс Книга и его подклассы Справочник и Энциклопедия
Абстрактный класс Книга (Шифр, Автор, Название, Год, Издательство). Подклассы Справочник и...

Абстрактный класс и его производные
Здравствуйте. Мне необходимо построить иерархию классов - базовый абстрактный и два производных....

Абстрактный класс и его наследники
Знаю, что если есть абстрактный клас(например: Account) и наследники абстрактного...

10
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
14.05.2013, 19:02 2
ваша система оперирует работниками(!) из которых нужно вытаскивать среднемесячную зарплату
у всех работников бывают оклады
у вас есть два типа работников. отличие между ними - разная периодичность выплаты заработной платы
работник А у вас будет получать оклад раз в месяц
работник Б у вас будет получать оклад раз в день
а теперь придумайте формулу по которой будет считаться среднее месячное зп исходя из окладов, валидное для обоих типов работников. придумаете - я вам пиво выставлю

так вот, тут вступает в игру полиморфизм на усвоение которого и была создана эта лаба, и о котором было бы неплохо почитать

https://www.cyberforum.ru/blog... g1258.html может поможет
0
1 / 1 / 0
Регистрация: 27.04.2013
Сообщений: 36
14.05.2013, 19:30  [ТС] 3
Цитата Сообщение от AckiyBolt Посмотреть сообщение
ваша система оперирует работниками(!) из которых нужно вытаскивать среднемесячную зарплату
у всех работников бывают оклады
у вас есть два типа работников. отличие между ними - разная периодичность выплаты заработной платы
работник А у вас будет получать оклад раз в месяц
работник Б у вас будет получать оклад раз в день
а теперь придумайте формулу по которой будет считаться среднее месячное зп исходя из окладов, валидное для обоих типов работников. придумаете - я вам пиво выставлю

так вот, тут вступает в игру полиморфизм на усвоение которого и была создана эта лаба, и о котором было бы неплохо почитать

https://www.cyberforum.ru/blog... g1258.html может поможет
Статья в блоге очень интересная и немного пролила свет, спасибо.

В моем задании абстрактным классом является "работник" а работник с фикс.зарплатой и почасовой зарплатой это уже более конкретные сущности. Я правильно понял?

Формулы валидной для обоих типов работников составить нельзя, поэтому в каждом классе переопределяем метод "посчитать з/п" для конкретного типа работника. Как то так?
0
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
14.05.2013, 19:45 4
именно так
0
1 / 1 / 0
Регистрация: 27.04.2013
Сообщений: 36
15.05.2013, 21:25  [ТС] 5
Задание в первом посте.

У каждого работника должен быть свой id, имя и среднемесячная зарплата. Раз абстрактный класс не создает экземпляры, то для каждого типа работников делаю свой конструктор для этих параметров, правильно?

Как мне правильно описать оба типа работников в одном "списке" ( масиве?)? Каждому работнику надо будет указать фиксированную или почасовую зп, как потом правильно организовать обращение к методу для подсчета средней зп?

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


Наставьте на путь истинный пожалуйста, может у кого то есть примеры подобных заданий. Что почитать/посмотреть?



базовый абстрактный класс

Кликните здесь для просмотра всего текста
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
package Abstract;
 
public abstract class BaseWorker {
 
    abstract void calculate();
 
    public static void main(String[] args) {
 
        WorkerFixedSalary[] workerFixed = new WorkerFixedSalary[3];
 
        WorkerFloatSalary[] workerFloat = new WorkerFloatSalary[3];
 
        workerFloat[0] = new WorkerFloatSalary("Dean", 800);
 
        workerFixed[0] = new WorkerFixedSalary("Tom", 600);
        workerFixed[1] = new WorkerFixedSalary("Sam", 700);
 
        for (WorkerFixedSalary e : workerFixed) {
            e.setId();
            System.out.println("name= " + e.getName() + ",id= " + e.getId()
                    + ".salary= " + e.getSalary());
        }
    }
 
}


класс работников с фиксованой зарплатой

Кликните здесь для просмотра всего текста
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
package Abstract;
 
public class WorkerFixedSalary extends BaseWorker {
 
    void calculate() {
        //формула для расчета
    }
 
    private String name;
    private double salary;
    private int id;
    private static int nextId;
 
    public WorkerFixedSalary(String n, double s) {
        name = n;
        salary = s;
        id = 0;
    }
 
    public double getSalary() {
        return salary;
    }
 
    public void setSalary(double salary) {
        this.salary = salary;
    }
 
    public String getName() {
        return name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId() {
        id = nextId;
        nextId++;
    }
 
    public static int getNextId() {
        return nextId;
    }
 
}


класс работников с почасовой зарплатой

Кликните здесь для просмотра всего текста
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
package Abstract;
 
public class WorkerFloatSalary extends BaseWorker {
 
    void calculate() {
        //формула для расчета
    }
 
    private String name;
    private double salary;
    private int id;
    private static int nextId;
 
    public WorkerFloatSalary(String n, double s) {
        name = n;
        salary = s;
        id = 0;
    }
 
    public double getSalary() {
        return salary;
    }
 
    public void setSalary(double salary) {
        this.salary = salary;
    }
 
    public String getName() {
        return name;
    }
 
    public int getId() {
        return id;
    }
 
    public void setId() {
        id = nextId;
        nextId++;
    }
 
    public static int getNextId() {
        return nextId;
    }
 
}
0
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
16.05.2013, 09:12 6
атата

Java
1
2
3
private String name;
    private double salary;
    private int id;
это должно быть в абстрактном ибо общая информация

ваш метод генерации айдишников никуда не годится. нельзя так делать. сетить нужно руками или написать утилитку для этого

и я же говорил что программа работает с работниками. попробуйте развить эту мысль:
Java
1
2
3
4
BaseWorker[] workers = new BaseWorker[3];
        workers [0] = new WorkerFloatSalary("Dean", 800); 
        workers [1] = new WorkerFixedSalary("Tom", 600);
        workers [2] = new WorkerFixedSalary("Sam", 700);
0
153 / 153 / 10
Регистрация: 16.10.2012
Сообщений: 354
Записей в блоге: 1
16.05.2013, 17:24 7
Краткая зарисовка, объясняющая для чего нужны абстрактные методы (я только учусь - надеюсь нигде не напортачил. Если что - поправьте):

У нас есть абстрактный класс "Shape", наследниками которого являются "Cube", "Pyramid", "Sphere" etc.
При этом в классе "Shape" существует абстрактный метод getVolume(). Создавая абстрактный метод мы заставляем каждый класс наследник его реализовать. Т.е. у класса Shape не может быть наследника, у которого нет метода getVolume(). Конечно, ничто не мешает автору наследника написать что-то вроде
Java
1
public double getVolume() { return Math.random(); }
Но это он сам себе злобный буратино.

Предположим теперь, что у нас есть класс ShapeCounter, в котором некий массив Shape[]. И у этого класса есть метод getMaximumVolume(). Как в данном методе реализовать разные формулы расчета объема для разных фигур? Да никак не реализовать! Мы просто пишем
Java
1
Shape[i].getVolume();
а обо всем остальном болит голова у авторов конкретных классов фигур. Виртуальная машина сама, по типу объекта, понимает, какой конкретно метод ей надо вызывать. Прелестно, не так ли?
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
04.08.2013, 17:41 8
В инете прочитал что абстрактные методы надо описывать в потомках, а в базовом класе только обьявить через пустые скопки в которых надо оставить запятую и точку или после них. Но как тогда описывать этот метод в потомках-просто роскрывая скобки. Хотя в задание все таки действительно указано описать абстрактный метод в базовом класе, который однако не обозначен как абстрактный. Интересно о какой лабе идет речь, где есть такое задание. У Меня есть аналогичное задание только там плавающая зарплата зависит от количества дней потому такое поле наверное тоже должно быть. И перечень работников наверное надо создавать как колекцию чтобы ее можно было упорядочить. А сперва надо создать наверное два обьектов дочерних класов и обьединить в колекцию Или масив обьектов: ибо поле салари должно быть и так одинаковым. а сам масив наверное лутше создавать через цыкл for, где i как раз будет id. Во втором идентификатор будет начинатся с количества обьектов в первом масиве.

Добавлено через 5 минут
Если что то не так в моих размышлениях, подскажите.

Добавлено через 17 секунд
Если что то не так в моих размышлениях, подскажите.
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
06.08.2013, 01:57 9
Ну да подскажите все таки как упорядочить перечень обьектов двох класов потомком. Надо ли этих 2 масива обьектов обьединять в колекцию для сравнение с помощью компаратора или это можно сделать без этого. И если например упорядочить по зарплате, как тогда быть если в нескольких работников она однакова и тогда надо упорядочить по именам в алфавитном порядке?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11178 / 7110 / 1680
Регистрация: 25.07.2009
Сообщений: 13,003
06.08.2013, 11:47 10
Рядом тема лежит с таким же заданием: https://www.cyberforum.ru/post4897574.html
0
3 / 3 / 1
Регистрация: 28.12.2011
Сообщений: 253
07.08.2013, 14:13 11
Поверю что этот код работает. А как тогда вывести лиш часть этой колекции? Через обычный цыкл-for? Но там очень сложная процедура сортировки. Есть же стандартный метод Collection.sort (). И еще остался вопрос на засыпку: а как записать в файл и прочитать правильно эту колекцию?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.08.2013, 14:13
Помогаю со студенческими работами здесь

Абстрактный класс и его наследники
Добрый день. Столкнулся с проблемой, решение которой не приходит в голову. Есть следующая...

Абстрактный класс и его деструктор
Приветствую всех. Объясните, как правильно написать деструктор абстрактного класса. Знаю, что он...

Абстрактный класс и его наследники - не получается вызвать методы
Есть абстрактный класс, есть классы-наследники, реализующие методы абстрактного класса. В одном...

Создать абстрактный класс «Товар», на его основе создать класс «Автомобиль»
Вечер добрый, а может и не добрый. В изучении C# столкнулся с такой проблемой - как исключения. ...


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

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

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