|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 10
|
||||||||||||||||||||||||||
Мнение программистов13.02.2016, 04:17. Показов 1137. Ответов 8
Метки нет (Все метки)
Здравствуйте)
Я начинающий программист и у меня не большой опыт программирования.Но хотелось услышать мнения по поводу моего выполненного задания про объектно-ориентированный подход и в общем про реализацию)Буду очень рад услышать ваши мнения) Условия задания
Построить иерархию классов для калькуляторов с разной функциональностью.
1.Простой калькулятор – выполняет 4 арифметические операции: сложение, вычитание, умножение, деление. 2.Простой калькулятор с памятью – имеет также одну ячейку памяти и выполняет с данной ячейкой 4 операции: очистить ячейку памяти, записать в ячейку памяти текущее значение, увеличить или уменьшить значение в ячейке памяти на текущее значение. 3.Инженерный калькулятор – выполняет 4 арифметические операции и вычисляет значения 3 функций: синус, экспонента, квадратный корень. 4.Инженерный калькулятор с памятью – комбинация пунктов 2 и 3. Создать консольное приложение с единственным аргументом командной строки – имя входного файла. Структура входного файла: строка 1 - тип калькулятора, остальные строки - числа и операции для вычисления выражения, при этом каждое данное находится в одной строке. Например, содержимое файла для выражения sin(2*10+5)-1, которое необходимо вычислить инженерным калькулятором, может иметь вид: 3 2 * 10 + 5 sin - 1 Все исходные данные корректные. Если в исходных данных есть ошибка, то результат работы программы может быть любым, в том числе программа может завершиться аварийно. В приложении создать экземпляр калькулятора заданного типа и с его помощью вычислить значение выражения, определяемого содержимым файла.
0
|
||||||||||||||||||||||||||
| 13.02.2016, 04:17 | |
|
Ответы с готовыми решениями:
8
Перестановка букв в слове. Ваше мнение. Нужно ваше мнение об этом форуме Решение задачи. Требуется мнение гуру |
|
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
|
||||||
| 13.02.2016, 06:13 | ||||||
|
Много повторяющегося кода. Так быть не должно.
switch 1,2,3,4; одно и то же с минимальными различиями. В каждом case тоже повторения для каждой операции. циклы одинаковые. В классе Calc: методы: multiplication, division, addition, subtraction - методы отличаются одним символом, остальное всё повторение. Это ненормально. В классах наследниках куча переопределённых методов которые ничего не делают:
Если метод не меняет своего поведения - не надо его переопределять. Метод предка и так будет вызываться. Программу можно сократить в разы. Имена: Calc b = new Calc(); плохое имя, надо что-то имеющее смысл. Я бы сделал одинаковый интерфейс у всех калькуляторов. Они должны принимать только строки. Не нужно парсить строки в main(), пусть калькулятор сам этим занимается. В main() можно прочитать первую строку и создать калькулятор нужного типа. Тип ссылочной переменной Calc на любой калькулятор. А далее работать со всеми калькуляторами через единый интерфейс - скармливать им строки.
1
|
||||||
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
|||||||
| 13.02.2016, 10:45 | |||||||
|
Далее... Вот представьте я решил воспользоваться вашим классом калькулятора в своей программе. Мне понадобилось умножить 2 числа. Я беру ваш класс Calc и смотрю на метод.
1
|
|||||||
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 10
|
||||||
| 13.02.2016, 11:19 [ТС] | ||||||
|
так может сделать в классе Calc в методах вот так?? тогда в mail перебор уберется)
0
|
||||||
|
944 / 687 / 230
Регистрация: 28.04.2013
Сообщений: 1,925
|
|
| 13.02.2016, 13:39 | |
|
eti666, разбейте задачу на более простые действия (чем проще тем лучше). Начните делать самые простые действия. Постепенно расширяйте возможности своей программы. Старайтесь что бы при расширении возможностей не было необходимости исправлять то, что уже написано.
1
|
|
|
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
|
||||||||||||||||||||||||||
| 13.02.2016, 18:43 | ||||||||||||||||||||||||||
|
Вот скажем ещё кусок:
Цикл поиска "exp", потом "sqrt" и т.д. Можно ведь в одном цикле проверять соответствие строки каждой из поддерживаемых операций. Можно switch со строками использовать. Далее. А нужен ли вообще цикл? Ведь структура файла такова что после строкой с числом всегда следует строка с операцией. Т.е достаточно проверять только строку при i = 1; Модификация списка строк - удаление обработанных операций и запись туда результата выглядит сомнительно (особенно преобразование числа в строку только для того чтобы потом преобразовть обратно в число). Возможно стоит просто хранить индекс текущей строки и текущий результат вычислений. UPD: Поэкспериментировал с enum'ами на примере этой задачи: здесь реализованы п.п. 1-3. 4-ю из этого так просто не реализовать (или придётся код дублировать). Есть недоработки: после операции с памятью должна быть возможность число ввести по идее. Но здесь только следующую команду. Зато добавил команду "извлечь из памяти" хотя в задании такой нет. Но без неё смысл работы с памятью теряется.
1
|
||||||||||||||||||||||||||
|
4575 / 2774 / 491
Регистрация: 28.04.2012
Сообщений: 8,779
|
||
| 13.02.2016, 21:38 | ||
|
1
|
||
|
0 / 0 / 0
Регистрация: 16.01.2014
Сообщений: 10
|
||
| 14.02.2016, 14:23 [ТС] | ||
|
Ну мне так кажется более разумным. Может я и ошибаюсь
![]() Добавлено через 2 часа 5 минут
0
|
||
|
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
|
|
| 14.02.2016, 16:14 | |
|
Ну в задании сказано построить иерархию классов калькуляторов.
А если от этого отойти... Можно сделать класс-контейнер калькулятор. И сделать интерфейс "вычислительный блок". И реализовать с этим интерфейсом "блок основных-операций", "блок инженерных вычислений", "блок операций с памятью". А потом лепить свои экземпляры класса-калькулятора запихивая в класс-контейнер произвольный набор вычислительных блоков. Но это не наследование, а композиция. Набор блоков можно даже в run-time менять, "собирая" из вычислительных блоков разные калькуляторы без перекомпиляции.
0
|
|
| 14.02.2016, 16:14 | |
|
Помогаю со студенческими работами здесь
9
Интересно мнение программистов с опытом Хочу услышать мнение опытных программистов Интересует мнение программистов, использующих в своей работе WPF c C# Влияние образования на дальнейшую карьеру, интересует мнение именно программистов C#, так как это моя основная специализация Ищу программистов Cocos2d-x для разработки игр, Ищу программистов C++ Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|