Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / задача о персонале с фикс и повременной з.п. / 25 сообщений из 70, страница 1 из 3
27.10.2016, 14:10
    #39335373
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Добрый всем день.

Пытаюсь освоить ООП и выбрал для этого JAVA. Поэтому просьба не пинать меня сразу :-)
посмотрел небольшой какой - то курс по ООП.

И захотелось реализовать какую-нибудь классическую задачку. Но тривиальные задачки на геометрические фигуры , животные и т.п. не интересно. И вот выбрал кое - что посерьезнее (правда это вопрос из собеседования на C#) . Итак, сама задача (возможно она знаменита) :

Построить три класса (базовый и 2 потомка), описывающих некоторых работников с почасовой оплатой (один из потомков) и фиксированной оплатой (второй потомок). Описать в базовом классе абстрактный метод для расчета среднемесячной заработной платы. Для «повременщиков» формула для расчета такова: «среднемесячная заработная плата = 20.8 * 8 * почасовую ставку», для работников с фиксированной оплатой «среднемесячная заработная плата = фиксированной месячной оплате».

a) Упорядочить всю последовательность работников по убыванию среднемесячного заработка. При совпадении зарплаты – упорядочивать данные по алфавиту по имени. Вывести идентификатор работника, имя и среднемесячный заработок для всех элементов списка.
b) Вывести первые 5 имен работников из полученного в пункте а) списка.
c) Вывести последние 3 идентификатора работников из полученного в пункте а) списка.
d) Организовать запись и чтение коллекции в/из файл.
e) Организовать обработку некорректного формата входного файла.

Если читать первую часть задания , то вроде как всё просто.
Описываем абстрактного предка с абстрактным методом GetSalary, в потомках описываем логику 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.
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.
package persony;
/*класс описывающий сотрудников на повременке*/

public class povremensh extends pers {
	
	 private static String name ;
	 private static int id ;
	 private static int time ;
	 private double salary ;
	 

	 public povremensh(int i, String name, int time) {
		
			this.name = name;
			this.time = time;
			
	}

	@Override
	double Get_Salary(float s) {
		this.salary=20.8 * 8 * s;
		 return this.salary;
	}
}

/*класс описывающий сотрудников на окладе*/

public class fix extends pers {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public fix(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name = name;
	}



	@Override
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}


	 
}


/*Класс предок****************************/
abstract class pers {
	
	   
	
	abstract  double Get_Salary(float s) ;
	

}

public class main  {
	public static void main(String args[]) {

		fix f = new fix(1, "Маша", 25000);
		povremensh p = new povremensh(2, "Коля", 14);

		
			}

}



Но вопросы начинаются с нюансов а - е.
Выясняется , что работников много и их хотят сортировать . исходя из этого выходит как - то так:
1) таким образом встаёт вопрос о том как хранить входные данные. Понятно , что это либо массив , либо список. Допустим даже это массив из 10 сотрудников(упростим).
2) получается, что абсолютно ВСЕ сотрудники должны находиться в одном экземпляре некоего класса (а о нём ведь в задании ни слова), который наверно будет потомком fix и povremensh (а java разве позволяет это делать ? ).
3) таким образом массив создаем в этом классе .

Короче я возможно написал и полнейший бред, но поясните как я тогда должен проектировать свои классы ? интересна сама инициализация.
...
Рейтинг: 0 / 0
27.10.2016, 14:20
    #39335388
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,
1) либо в памяти коллекция либо в субд.
2) зачем?
...
Рейтинг: 0 / 0
27.10.2016, 14:21
    #39335391
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,

Классы именуются с заглавной буквы строго на английском языке.
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

Вам в коде не хватает вот этого:

Код: java
1.
2.
3.
pers[] employees = new pers[10];
pers[0] = new fix(1, "Маша", 25000);
pers[1] = new povremensh(2, "Коля", 14);
...
Рейтинг: 0 / 0
27.10.2016, 15:06
    #39335458
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Blazkowiczandron81,

Классы именуются с заглавной буквы строго на английском языке.
http://www.oracle.com/technetwork/java/codeconvtoc-136057.html

Вам в коде не хватает вот этого:

Код: java
1.
2.
3.
pers[] employees = new pers[10];
pers[0] = new fix(1, "Маша", 25000);
pers[1] = new povremensh(2, "Коля", 14);


Спасибо за ответ.
Вы наверно вот так хотели написать ?
Код: java
1.
2.
3.
		pers[] employees = new pers[10];
		employees[0] = new fix(1, "Маша", 25000);
		employees[1] = new povremensh(2, "Коля", 14);



я наверно крайне невежественный в ООП. Но не понимаю как скажем в экземпляре "employees[0]" класса "pers" есть конструктор от класса fix, тогда как класс fix это наследник от pers , а не наоборот.
...
Рейтинг: 0 / 0
27.10.2016, 15:11
    #39335466
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
спасибо.


Petro123andron81,
1) либо в памяти коллекция либо в субд.


ну коллекция это круто ещё и не смотрел я эту тему.
думаю СУБД тоже излишне в данной задачке. тут ведь речь идёт о файлах

А вот массивы в самый раз

Petro1232) зачем?


Затем что я так понимал, но из сообщения ниже понял, что действительно незачем :-)
...
Рейтинг: 0 / 0
27.10.2016, 16:16
    #39335580
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81Вы наверно вот так хотели написать ?

Ну, да. Многопоточность дала сбой.

andron81я наверно крайне невежественный в ООП. Но не понимаю как скажем в экземпляре "employees[0]" класса "pers" есть конструктор от класса fix, тогда как класс fix это наследник от pers , а не наоборот.
Класс FixedPriceEmployee расширяет класс Employee.
Экземпляр FixedPriceEmployee является так же экземпляром Employee. Поэтому всё что может Employee может и FixedPriceEmployee.
Поэтому Employee e = new FixedPriceEmployee();

А вот конструкция
FixedPriceEmployee fpe = new Employee();
уже не допустима, потому что у FixedPriceEmployee могут быть методы, которые Employee не реализует. Просто сосредоточтесь и подумайте над этим. И переходите на внятные имена.
...
Рейтинг: 0 / 0
27.10.2016, 21:27
    #39335796
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
запутался я .
вы пишите :
BlazkowiczЭкземпляр FixedPriceEmployee является так же экземпляром Employee. Поэтому всё что может Employee может и FixedPriceEmployee.
Поэтому Employee e = new FixedPriceEmployee();


но в Employee нет конструктора FixedPriceEmployee()
конструкция Employee e = new FixedPriceEmployee(2, "Коля", 14); разве прокатит?

код переписал как вы хотели


Код: 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.
abstract class Employee{
	
	   
	
	abstract  double Get_Salary(float s) ;
	

}



public class FixedPriceEmployee  extends Employee {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public FixedPriceEmployee(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name = name;
	}



	@Override
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}


	 
}
...
Рейтинг: 0 / 0
27.10.2016, 21:38
    #39335800
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
и самое интересное , что да, работает.

но это я и не пойму .
вот этим мы создаём экземпляр e:
Employee e = new FixedPriceEmployee(2, "Коля", 14);

я думал , что Employee это предок FixedPriceEmployee , а значит потомок FixedPriceEmployee наследует теоретически всё от Employee.
(об этом свидетельствует строка public class FixedPriceEmployee extends Employee )
но никак не наоборот. Выходит класс "Employee" ничего не знает об "FixedPriceEmployee" , в том числе и о конструкторе FixedPriceEmployee.

а выходит нет - знает !
...
Рейтинг: 0 / 0
27.10.2016, 21:57
    #39335806
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,
полиморфизм - один из китов ООП. Совсем рядом.
...
Рейтинг: 0 / 0
27.10.2016, 22:22
    #39335811
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Petro123andron81,
полиморфизм - один из китов ООП. Совсем рядом.

да , но тут его не понимаю ))) не могли бы пояснить ?
...
Рейтинг: 0 / 0
28.10.2016, 08:34
    #39335892
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,

https://www.youtube.com/user/pro100fox2/videos
...
Рейтинг: 0 / 0
28.10.2016, 08:39
    #39335894
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81и самое интересное , что да, работает.
Я бы на вашем месте, разобрался с тем почему так работает. Вы вместо этого пытаетесь натянуть свои фантазии на факты. А они не совпадают.

andron81Выходит класс "Employee" ничего не знает об "FixedPriceEmployee" , в том числе и о конструкторе FixedPriceEmployee.
а выходит нет - знает !
Нет, не знает. Почему вы решили то знает? Конструкторы это отдельная тема. Конструкторы FixedPriceEmployee явно и не явно вызывают конструкторы Employee.
...
Рейтинг: 0 / 0
28.10.2016, 09:32
    #39335924
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
BlazkowiczЯ бы на вашем месте, разобрался с тем почему так работает. Вы вместо этого пытаетесь натянуть свои фантазии на факты. А они не совпадают.

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


BlazkowiczAndron81Выходит класс "Employee" ничего не знает об "FixedPriceEmployee", в том числе и о конструкторе FixedPriceEmployee.
а выходит нет - знает !

Нет, не знает. Почему вы решили то знает?


потому как вот это:
Employee e = new FixedPriceEmployee(2, "Коля", 14);
я понимаю так: грубо говоря "e" делаем типа класса "Employee". А после "=" начинаются непонятные моменты : делаем инициализацию FixedPriceEmployee(2, "Коля", 14). тогда как FixedPriceEmployee это метод не из Employee, а из класса FixedPriceEmployee. А класс FixedPriceEmployee это наследник Employee, а не наоборот, поэтому непонятно как мы можем применить этот метод из Employee.

то есть вот так было бы понятно:
FixedPriceEmployee e = new FixedPriceEmployee(2, "Коля", 14);
так как "e" мы делаем типом FixedPriceEmployee и поэтому можем в инициализации тут же вызвать метод FixedPriceEmployee(параметры)

а в случае Employee e = new FixedPriceEmployee(2, "Коля", 14)
в моём понимании мы делаем e типа Employee, но этот класс ничего не знает о существовании "FixedPriceEmployee"

Blazkowicz Конструкторы FixedPriceEmployee явно и не явно вызывают конструкторы Employee.

это я понимаю

на всякий случай привожу ещё раз код

Код: 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.
abstract class Employee{
	
	   
	
	abstract  double Get_Salary(float s) ;
	

}



public class FixedPriceEmployee  extends Employee {

	 private static  String name ; /*имя сотрудника*/
	 private double salary ; /*зар. плата*/


	 public FixedPriceEmployee(int i, String name, double salary )  {
		 	this.salary = salary;
			this.name = name;
	}



	@Override
	double Get_Salary(float s) {
		this.salary=s;
		 return s;
	}


	 
}
...
Рейтинг: 0 / 0
28.10.2016, 10:18
    #39335955
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,

Employee e - это переменная, которая указывает на объект типа Employee.
new FixedPriceEmployee() - это конструктор, который создаёт новый объект типа FixedPriceEmployee.
Является ли объект типа FixedPriceEmployee так же объектом типа Employee? Да!
Значит переменная типа Employee может ссылаться и на вновь созданный объект.

Что в этой логике не понятного?
...
Рейтинг: 0 / 0
28.10.2016, 11:17
    #39336033
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,
Юмор люблю).
Я не пойму, это вы тестируете Blazkowicz или он вас? ))
Nixic вам дал ссылку. Вы её изучили?
Вникайте во всё что вам дают. А потом спрашивайте...не торопясь.
imho
...
Рейтинг: 0 / 0
28.10.2016, 12:41
    #39336146
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Petro123
Nixic вам дал ссылку. Вы её изучили?


ок. беру паузу тогда
...
Рейтинг: 0 / 0
28.10.2016, 14:30
    #39336278
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,

как раз парень и задаёт волнующий для меня вопрос на 39:30
http://www.youtube.com/watch?v=9GdtWiovvIQ&list=PLmqFxxywkatR3qNmxqcFIHF9MN2-_eteU
...
Рейтинг: 0 / 0
28.10.2016, 14:35
    #39336287
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,

Добавьте в ваш пример помимо getSalary методы уникальные для каждого типа.
И поэксперементируйте в IDE с тем как эти методы вызываются.
...
Рейтинг: 0 / 0
28.10.2016, 14:36
    #39336289
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Blazkowiczandron81,

Добавьте в ваш пример помимо getSalary методы уникальные для каждого типа.
И поэксперементируйте в IDE с тем как эти методы вызываются.
Все методы сделайте public, чтобы они были виртуальными.
...
Рейтинг: 0 / 0
28.10.2016, 14:37
    #39336292
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81то есть берем FixedPriceEmployee и обращаемся с ним как Employee . таким образом
это и есть полиморфизм1
andron81получаем весь фарш Employee , но явным образом обращаться к FixedPriceEmployee мы уже не можем .
нечего не понял.
- в конструкторе наследника нужно вызывать супер класса конструктор.
- в коде в переменной суперкласса программа автоматом вызовет процедуру наследника.
Это полиморфизм2
...
Рейтинг: 0 / 0
28.10.2016, 14:39
    #39336295
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Foo {
    Foo(String str) { }
}

class Bar extends Foo {
    Bar(String str) {
        super(str);
    }
}
...
Рейтинг: 0 / 0
28.10.2016, 14:53
    #39336309
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Petro123andron81получаем весь фарш Employee , но явным образом обращаться к FixedPriceEmployee мы уже не можем .
ничего не понял.


я имел ввиду, что мы уже не можем обратиться к методам FixedPriceEmployee если их нет в предке.
ладно... проехали
...
Рейтинг: 0 / 0
28.10.2016, 15:04
    #39336334
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
andron81я имел ввиду, что мы уже не можем обратиться к методам FixedPriceEmployee если их нет в предке.
ладно... проехали
- приведение типов если очень надо
http://ru.stackoverflow.com/questions/271985/Явное-приведение-типов
...
Рейтинг: 0 / 0
29.10.2016, 17:27
    #39336969
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Petro123andron81я имел ввиду, что мы уже не можем обратиться к методам FixedPriceEmployee если их нет в предке.
ладно... проехали
- приведение типов если очень надо
http://ru.stackoverflow.com/questions/271985/Явное-приведение-типов

в такие дебри пока не лезу
...
Рейтинг: 0 / 0
31.10.2016, 22:28
    #39338327
andron81
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
задача о персонале с фикс и повременной з.п.
Blazkowicz
Код: java
1.
2.
3.
pers[] employees = new pers[10];
pers[0] = new fix(1, "Маша", 25000);
pers[1] = new povremensh(2, "Коля", 14);




подскажите, а вот если мне нужно сортировать элементы я вынужден буду тупо общаться тогда с элементами своего массива посредством Get, Set-ов из метода Main ?
а есть ли другие способы ?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / задача о персонале с фикс и повременной з.п. / 25 сообщений из 70, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]