Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Java: Общие вопросы > Помогите разобраться как строятся java программы |
Автор: Kratom 4.7.2009, 04:03 |
Всем здрасте, начал изучать java, до этого программированием не занимался(не считая калькуляторов на разных языках), о базовых понятих класса почитал , но все равно не понятно как строить программу и как это все использовать. Сейчас решаю задачу с сайта training.ru, она является тестовой для поступающих учиться на их курсы. ************************************************************ Цель: Демонстрация навыков объектно-ориентированного подхода и аналитического мышления. Формулировка: написать программу расчета зарплаты сотрудникам некой IT-компании. Ниже список сотрудников: EMPLOYEE ROLE PROJECT(S) FIXED_SALARY EXPERIENCE (YEARS) ---------------------------------------------------------------------------------------------------------- Ivanov Ivan Developer Chart Editor (fixed cost), 1700 0,5 Petrov Petr Developer Employment System 2000 2,0 Mike Manager Chart Editor (fixed cost), 6000 4,0 Employment System, Bank Transaction Jim Developer Chart Editor (fixed cost) 3500 2,0 Где, EMPLOYEE – полное имя сотрудника ROLE - должность PROJECT – название актуальных проектов сотрудника Fixed cost – маркер – проект с ограниченным бюджетом FIXED_SALARY – фиксированный оклад EXPERIENCE – стаж работы Условия: Developer может принимать участие только на одном проекте. Расчет бонусов: 1. 50 за каждый год после одного года работы 2. 500 за каждый проект, у которого неограниченный бюджет Ввод/Вывод: Результат работы программы должен выводить в консоль список имен сотрудников с указанием полной зарплаты (оклад + бонусы), отсортированный по зарплате. Результат работы должен представлять собой ZIP-архив с исходными кодами приложения и директорией build содержащая скомпилированное, готовое к запуску приложение, если необходимо - инструкция. ******************************************************** Вот первый набросок package raschet; import java.io.*; public class Employee { //данные класса. String Name; String Role; float experience; String [][] projects; float FixedSalary; public static void main(String[] args){ ******** } public class Developer extends Employee { ******** } } класс предок Employee c переменными содержащими сведения из таблицы, в том числе двумерный массив содержащий названия проектов и идентификатор фиксированного или не фиксированного бюджета. В нем же абстрактный метод, назовем его getSalary реализация его будет содержаться в подклассах девелопер и менеджер, так как у менеджеров по другому зарплата считается, а если девелопер будет задействован более чем в двух проектах программа должна выдавать ошибку. Далее создаются три объекта типа девелопер и один типа менеджер, в них заносятся данные, а дальше в методе мейн выводятся в консоль с использованием метода getSalary, сортировку пока не трогаю с ней и сам разберусь. Да, и все это будет в одном файле, после метода мейн будут идти объявления класса девелопер и манагер, в теле мейн создание экземпляров этих классов, и распечатка. Просьба общую концепцию подсказать, чисто теоретически. |
Автор: frikey 4.7.2009, 05:21 | ||
Вот этого точно не стоит делать. Помести лучше каждый класс в отдельный файл. |
Автор: Connie 4.7.2009, 12:18 |
http://www.java-course.ru/ и было бы неплохо про объектно ориентированное программирование почитать, мне в свое время помогла и понравилась книга Gordon Dodril C++ LANGUAGE TUTORIAL поищите ее в сети, ничего, что она про С++ основные принципы и там и в java схожи |
Автор: Данкинг 4.7.2009, 13:23 |
И сразу с JAVA начинаешь? ![]() |
Автор: cube 4.7.2009, 17:56 | ||
да разницы нет, с чего начинать... Идею ты понял правильно ;) Классы девелопер и манагер отдельно от мэйн класса их нафиг ;) и Employee тоже ;) в Employee как ты правильно все написал будет основной код, этот класс ты будешь расширять как Девелопером так и Манагером Но вот только я бы посоветовал написать тебе еще один класс например EmployeeList в котором будет основное поле List<Employee> list = new ArrayList.... и все мотоды например public List<Employee> getManagers() {} // здесь будешь возвращать список всех менеджеров public List<Employee> getDevelopers() {} // здесь будешь возвращать список всех девелоперов public double getAmountByEmloyee(Employee emp) {} // здесь сумму по конкретному челу (будь то менеджер, или девелопер) public List<String> getProjectsByEmloyee(Employee emp) {} // здесь будешь возвращать список названий проектов будет еще один private метод который загрузит из базы данных или из какого-то файла или еще от куда нибудь список list преимущества такой конструкции - со временем ты можешь ее расширать добавляя новые объекты и методы для работы с ними, удачи ;) |
Автор: rimidal 4.7.2009, 19:49 | ||
Еще как есть. Любой предмет изучается прежде всего согласно истории его развития. Вот и программирование так. Сначала были процедуры, потом появились модули и только потом ООП (это быстро и на пальцах). Изучать надо все по порядку. Начинать изучение программирования с явы это все равно что учиться летать сразу на аэробусе. Вобщем изначально надо посидеть хотябы с полгодика на паскале (ну или чем-либо подобном), так сказать "пройти курс молодого бойца", а уж потом начинать изучать ООП и смотреть в сторону явы. |
Автор: lihusha 4.7.2009, 20:54 |
Kratom, советую почитать книгу Лафоре "Объектно-ориентированное программирование в С++" Очень доступно для новичков. |
Автор: Fieral 5.7.2009, 00:43 | ||
Ога. Пусть с перфокарт начинает. А нет - лучше с паяльника. Автор, идите вот сюда: http://www.java-course.ru/ |
Автор: Kratom 5.7.2009, 01:07 | ||||||
за ссылку спасибо, сайт уже телепортом сливаю, то что нужно для начала изучения EE. Но пока рано читать. Щас онлайн курс с progs.biz курю. А с книжками по с++ лучше пока попуститься, я так быстро не впитываю. Добавлено через 10 минут и 40 секунд
слабо понимаю, с утра напишу примитивней, потом попробую твой класс реализовать |
Автор: cube 5.7.2009, 14:12 | ||
Пиши как тебе удобнее и не обязательно мой класс реализовывать ;) Если появятся вопросы спрашивай, поможем ;) |
Автор: rimidal 5.7.2009, 21:45 | ||
А при чем здесь паяльник? Перфокарта - это всего лишь носитель информации. Где вы увидели что я предлагал использовать старое железо?. Kratom для начала вы взяли сложненькую задачу. Грамотно произвести декомпозицию задачи и разложить это все на классы это целое искусство. |
Автор: Kratom 6.7.2009, 23:03 | ||||||
Вот пока, что получается Employee.java
developer.java
manager.java
Вопрос, как сделать чтоб цикл выполнялся количество раз равное количеству строк в двумерном массиве? ведь проектов у менеджера может быть больше чем три. Еще надо решить откуда брать данные сотрудников, по задачи можно вручную создавать экземпляры типа манагер и девелопер и вносить данные в тексте программы. Можно ли их забить в базу данных какую-нибудь что б с программой носить один файл базы данных или вообще что б таблица с данными как-нибудь в программу вообще зашита была. Чем для этого воспользоваться, какой манул покурит? |
Автор: rimidal 7.7.2009, 01:08 | ||||||
Ну вы сами уже ответили на свой вопрос. Надо использовать базы данных. Какую использовать зависит от задачи. Думаю вам подойдет SQLite ну или ей подобные. Только если вы захотите использовать БД то вам потребуеться паттерн DAO(http://ooad.asf.ru/). Кроме этого вам еще надо почитать про JDBC. Вобщем прочитать надо будет много чего. P.S. Рановато вы за эту задачку взялись. А вобще здесь много полезных ссылок - http://forum.vingrad.ru/forum/topic-9229/view-all.html |
Автор: agR 7.7.2009, 01:47 | ||||
Исходя из вашего кода тут до БД еще курить и курить... Я бы посоветовал начать пока с начала, то бишь полистать книгу Эккеля "Thinking in Java" или же книгу Хорстманна "Java2. Библиотека профессионала" в 2-х томах, если конечно время позволяет ![]() Но без основ, вот так сходу, вряд ли что-то толковое получится. Например, относительно вашего кода: 1) Желательно (в принципе необходимо) придерживаться определенных правил (соглашений) написания кода: имена переменных должны начинаться с маленькой буквы, имена классов, наоборот - с большой. 2) Также следует придерживаться инкапсуляции данных: переменные экземпляров объявлять как private, а доступ к ним выполнять через общедоступные методы. 3)
Данный цикл никогда не выполнится, так как с самого начала условие не выполняется. Также, обычно счетчик используется в теле цикла, а у вас - нет. Если надо пройти по 2-мерному массиву, то это делается примерно так:
4) Мелочь, но все же, в большинстве случаев наиболее удобным является тип double, а не float. В общем, если есть время и желание, то лучше все таки почитать книги, тем более скорее всего на курсах расскажут то же самое, только за деньги (хотя смотря какие курсы - может и за большие деньги ![]() |
Автор: Fieral 7.7.2009, 14:36 | ||||
грузите из текстового файла
затем "раскусываете" строку используя http://java.sun.com/j2se/1.4.2/docs/api/java/util/StringTokenizer.html а числа распознаёте методами Double.parse(...) Integer.parse(...) |