Согласно жесткой интерпретации объектно-ориентированного дизайна, следует избегать использования служебного класса.
Проблема в том, что если вы будете следовать жесткой интерпретации, вам нужно будет заставить свой класс на какой-то объект сортировки, чтобы выполнить много вещей.
Даже дизайнеры Java делают классы полезности (java.lang.Math приходит на ум)
Ваши варианты:
double distance = Math.sqrt(x*x + y*y); //using static utility class
vs:
RootCalculator mySquareRooter = new SquareRootCalculator();
mySquareRooter.setValueToRoot(x*x + y*y);
double distance;
try{
distance = mySquareRooter.getRoot();
}
catch InvalidParameterException ......yadda yadda yadda.
Даже если мы должны избегать verbose, мы все равно можем:
Mathemetician myMathD00d = new Mathemetician()
double distance = myMathD00d.sqrt(...);
в этом случае, .sqrt () по-прежнему статично, так что же было бы в создании объекта в первую очередь?
Ответ заключается в создании классов утилиты, когда другим вариантом будет создание какого-то искусственного класса «Рабочий», который не имеет или мало использует переменные экземпляра.
ls не разветвляется. Ветвления оболочки и должностные лица для выполнения любой команды, которая не встроена, и одна из команд, которые это может выполнить, являются ls.
ls использует opendir () и readdir () для продвижения через все файлы в каталог. Если требуется больше информации об одном из них, это называет статистику ().
Добавить к ответу, в книге Языка программирования C (K& RC) они дали небольшой пример о том, как пойти о реализации ls. Они объяснили datastructures и функции, используемые очень хорошо.
Если Вы действительно хотите понять подробные внутренности ls, посмотрите на исходный код. Можно перейти по ссылке tpgould к источнику Соляриса, или легко найти источник онлайн из любого Linux или распределения BSD.
я особенно рекомендую 4.4BSD источник.
, Поскольку я вспоминаю, ls запускается путем парсинга его многих опций, затем запускается с файлов или каталогов, перечисленных на командной строке (значение по умолчанию). Подкаталоги обрабатываются рекурсией в стандартную программу списка каталога. Нет никакого ветвления () или должностное лицо (), что я вспоминаю.
Для понимания, что делает ls Вы могли взять глупца в источнике OpenSolaris: https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c.
, Если thatВґs подавляющий, на Солярисе Вы начинаете при помощи связки смотреть на системные вызовы, которые ls делает для понимания то, что это делает. Используя связку, попробуйте:
-afl-o ls.out/bin/ls
связки тогда смотрит на вывод в ls.out
, я полагаю, что трассировка является эквивалентом для связывания в Linux.