Adamos, да эта задача с канвасом и кистью - это как задача о взлетающем самолете с транспортера. Она не решаема. И GoF здесь непричем. Просто в ней не хватает исходных данных. Не описан контракт. Или отвественности.
А ответственности кисточки и канваса - каждый себе придумывает так как хочет. И уже после этого бери хоть ГоФ хоть Дядьку Боба хоть Иисуса Кириевского.
Vladislav, об этом еще Грибоедов писал. Горе от ума называется.
Забудь про ООП. Просто сделай чортову задачу. Сделай в 1 класс.
А потом когда проект станет большой - у тебя появится естественное разделение
его на части. И это разделение будет как раз правильным. Мотивированным.
Почитай про философии KISS, YAGNI.
Типизация что ты затеял - это штука полезная. Но в плане motivation - ты просто звучал
неубедительно. Нет мотивации делать отдельный контейнер для размеров.
Vladislav, а Питон. Ну ладно. Я думал какой-то строгий язык типа C#.
Я вот по поводу этой строки.
sh = Ship(100, 100) # должна быть ошибка т.к. не влезает в пространство
Что ты здесь хочешь проверять? С точки зрения фазы рантайма - ты можешь поставить
проверку условия в теле конструктора и проверять что параметры заходят в диапазон.
Это - нормальная практика. И бросить исключение или аварийно прервать приложение.
Тут наверное от задачи зависит. Если ты распознаешь цветы на зеленом лугу. То наверное канал зеленого цвета не несет особо ценной информации. А вот красный (маки) будет очент информативен.
А свертки для разного канала тоже разные потому что ищется разная информация. Там лепестки. Там трава. Или рябь или еще бох знает какие графические артефакты.
Я всегда говорил что ООП - это набор практических советов. Но так туда заходят всякие теоретики. И как начинают разводить 7 воду на киселе. Я помню в университете мы спорили. Как дизайнить UI API. Кисть должна быть аргументом метода draw Canvas? Или наоборот? До сих пор спорим. Как про первичность яйца и куриц.
Напиши самый простой вариант кода который работает. Потом приаттачь его сюда.
Эксперты посмотрят и дадут советы. А то ты сейчас придумаешь новую космологическую теорию
вселенной. А у тебя просто машина с баком.
Linux не оперирует потоками обычно. Потоки реализуются через библиотеку pthreads. И насколько я помню пуск такого потока будет не сильно отличаться от процесса. Там будет только разница в доступе к shared объектам.
Скорее всего это и будет процесс. Тогда вопрос можно перефомулировать как - какие вообще состояние у Linux -процесса бывают состояния? Их там штук 5. Zombie. Running. Stopped. И 2 вида sleep.
Следовательно у тебя есть 4 кейса. Комбинации из двух условий.
В случае когда у тебя не срабатывает - по какой линии мы идем?