LINUX.ORG.RU

Как разбивать программу на множество файлов?

 ,


0

1

Как в Vala разбивать программу на множество мелких файлов? В C и C++ для этого были заголовочные файлы и #include'ы, а собственно исполняемый код можно было писать почти в произвольном порядке и разбивке по файлам. Ещё можно было в заголовочном файле объявить класс и его методы, а определение сделать в другом файле.

В Vala, насколько я смог понять, нет опции #include, нет заголовочных файлов, определение метода нельзя вынести за пределы его объявления. В результате классы у разрастаются, программа разрастается ещё больше, заповедям написания «чистого» кода это совершенно противоречит. Что же делать? С++ не предлагать.

★★★★★

В C и C++ для этого были заголовочные файлы и #include'ы

И С++ сам же нарушал понятие «private», обязывая сделать эти декларации там же, где и public, не разрешая разорвать декларацию одного и того же класса на два заголовочных файла. (А PIMPL - это workaround.)

В результате классы у разрастаются, программа разрастается ещё больше

Может, классы должны проектироваться размером поменьше, что улучшает их обобщенность и повторное использование? Ведь чем больше класс, тем больше он заточен под какое-то уж очень частное решение. Или это хоть и некрасиво, но, по крайней мере, не противоречит «чистому коду»?

gag ★★★★★
()
Ответ на: комментарий от quiet_readonly

Что является хорошим тоном и в С++. Но, по-моему, ТС это знает и интересуется, как это в частности делается именно в vala.

gag ★★★★★
()
Ответ на: комментарий от quiet_readonly

Мало файлов, большие классы.

просто писать классы в разных файлах.

Этого недостаточно. Этот файл, например, мне кажется слишком большим.

Camel ★★★★★
() автор топика
Ответ на: комментарий от gag

Естественное разбиение имеет естественные пределы.

Может, классы должны проектироваться размером поменьше, что улучшает их обобщенность и повторное использование? Ведь чем больше класс, тем больше он заточен под какое-то уж очень частное решение. Или это хоть и некрасиво, но, по крайней мере, не противоречит «чистому коду»?

Это всё так, но чрезмерное разбиение, разбиение ради разбиения, рождает такой же нечитаемый код.

Camel ★★★★★
() автор топика
Ответ на: комментарий от Stil

а в плюсах 1 (header only) или 2 (заголовочный + реализация)

Stil ★★★★★
()
Ответ на: комментарий от tailgunner

Судя по load_svg, в этой вашей Vala есть функции (не методы, а именно свободные функции)?

Есть. Но вы так говорите, как будто это что-то плохое.

Tayler ★★
()
Ответ на: комментарий от Tayler

Наоборот. Они же копировали С#, в котором функций нет и который уже поэтому является говном, и вдруг приятный сюрприз.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Свободные методы.

Судя по load_svg, в этой вашей Vala есть функции (не методы, а именно свободные функции)?

В Vala нет функций, только методы. Если метод объявлен вне класса, то оно считается методом какого-то глобального класса, или что-то в таком духе. Чем это отличается от функций не могу сказать :-]

Camel ★★★★★
() автор топика
Ответ на: комментарий от quiet_readonly

Размер имеет значение.

Двести строк - это ерунда. Размер приличного файла с реализацией составляет 500-1000 строк, иногда разрастается до двух, трёх или семи тысяч.

Фу таким быть.

Camel ★★★★★
() автор топика
Ответ на: Свободные методы. от Camel

В Vala нет функций, только методы.
Если метод объявлен вне класса, то оно считается методом
какого-то глобального класса, или что-то в таком духе.
Чем это отличается от функций не могу сказать :-]

Не знаю, может я чего-то не догоняю

Но можно же такой hello world написать:

int main() {
print(«Hello World\n»);
return 0;
}

И можно простые сишные функции экстернами описывать на vala, использовать спокойно в коде на vala и потом линковаться с объектником с реализациями на си.

Где тут классы-то в этих двух случаях.

Tayler ★★
()
Последнее исправление: Tayler (всего исправлений: 1)
Ответ на: комментарий от Tayler

И можно простые сишные функции экстернами описывать на vala, использовать спокойно в коде на vala и потом линковаться с объектником с реализациями на си.

ой что-то мне это напоминает... :D

alex_custov ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.