Pull to refresh
4
0
Алексей Томин @alxt

разработчик

Send message
Почему Абстрация важнее других принципов?


Потому что если посмотреть на ошибки проектирования- то неверная/протекающая абстракция встречается очень и очень часто.

Почему математические фигуры автоматом иммутабельны?


В математике даже нет понятия «присвоить переменной новое значение»
Если уж пишут, что x=5 то оно всегда равно 5, а не до какой-то точки.

Квадрат с изменяемой стороной перестаёт быть квадратом в математическом смысле?


На мой взгляд- да.
Ещё раз- когда фигуры у нас это математические (иммутабельные) объекты, то может оказаться полезным иметь отдельный тип (в java лучше интерфейс, в связи с отсутствием множественного наследования — в C++ или Eiffel можно и классом обойтись) «квадрат», который наследует «прямоугольник» и «ромб».
Хотя бы из-за этого наследования — квадрат можно передать туда, где ждут ромб.
В целом- да. Но иногда- нет :)
В данном случае всё просто- наследование изначально противоречило изменчивости.
Именно что общего решения нет.
Но и проблема «наследует ли квадрат от прямоугольника»- надуманная.
Какая польза от лишнего класса?
Лучший код- его отсутствие.
Каждая лишняя строчка должна приносить пользу.
Где-то надо иметь интерфейсы и кассы «многоугольник», «четырёхугольник», «выпуклый четырёхугольник» «прямоугольник», «квадрат», «ромб», где-то хватит двух классов.
Скорее «цветной прямоугольник» может быть наследником прямоугольника. А «красный» это просто значение свойства.
Другое дело, что математические фигуры цвета не имеют. Для построение правильной иерархии надо понимать задачу — абстракцию чего нам надо создать.
public Square extends Rectangle, Rhombus конечно
Для изменяемого прямоугольника вообще «квадрат» это свойство- он может стать на время квадратом, а потом перестать им быть. И это хорошо, что автор сделал размеры целыми, а то с double возникает проблема «с какой погрешностью наш прямоугольник можно считать квадратом» :D
У ромба есть «длина» и «один из углов» (проще постулировать, что он не более 90 градусов).
Так что изменяемость ромба ломает наследование.
И тут интерфейсы лучше, потому что
public Square extends Square, Rhombus
Однако, для их изменения требуется объявить операции с ними. И именно в этот момент делает их разными в поведении. И запрещает наследование.


Нет никаких проблем.
public Square scale(Square, int) {}
public Rectangle scale(Rectangle, int) {}
public Rectangle scale(Rectangle, int, int) {}

Если мы меняем размер пропорционально, то квадрат останется квадратом. А иначе- всегда прямоугольник.

При этом да, интерфейсы позволяют абстрагироваться абстрактнее :)

Обычная путаница с этим прямоугольником.
Все потому, что забываете о главном принципе ООП — абстракции.
Если наши фигуры математические, то они иммутабельные. И да, квадрат это наследник прямоугольника. Без проблем.
Как только водятся методы set, то это уже не математические фигуры. Это что-то из реального мира.
И тогда "фигня в фирме прямоугольника, которая может менять размеры и пропорции" это не предок "фигни в форме квадрата, которая может менять размеры".
Для уточнения иерархии надо понять, что же у нас есть. Модель чего мы строим.
По сути весь SOLID это уточнение абстракции

Да, я регулярно пересылаю небольшие куски кода, скриптов, запросов.
Удобно же.
Спасибо!
Итого- разгонные блоки используют водород и керосин. По сути это 3-4 ступень ракеты.
Самозажигалки- для более тонкого маневрирования, требующего включения много раз. И двигатели управления тоже самозажигалки.
> Есть ионные, вполне распространенные.

Я в курсе про ионные. Даже считал траектории полёта. Но их тяга никак не подходит для обитаемых аппаратов :)

Хотя да, 3я ступень Сатурн-5 включалась на низкой орбите- так что да- многократно включаемые всегда были гидрозиновыми.
Вопрос цены ошибки. Незапуск 3й водородно/кислородной ступени Сатурна-5 всего лишь отменял полёт на Луну.
Незапуск маршевого двигателя Аполлона мог оставить экипаж на орбите Луны- а это гораздо хуже.
Вот поэтому и не спасают- слишком большой дисконт нужен для 5го запуска :)
>> Что серьёзно бывает бензин без свинцовых присадок? На основе чего теперь присадки?
Кислородосодержащие (если остальное не осилили), бензол (это запрещают уже- сильный яд) и непредельные углеводороды (тоже так себе- не хранится долго, особенно при наличии кислородосодержащих добавок).
Но современные технологии позволяют получать изомеры (изооктан 100 единиц имеет по-определению, если кто забыл) и не вводить добавки.
Вроде как абсолютно все включаемые в космосе двигатели- гидрозиновые (поправьте, если кто-то решился использовать что-то другое).
Тем более маневровые, которые должны включаться сотни раз — тут никакому зажиганию не доверят работу- только самовоспламенение, только хардкор :)
> Тут возникает сложный вопрос: а если бы не было Спейс шаттла, то какую схему выбрал бы Маск для многоразового корабля/ракеты?

С одной Шаттл тоже не на пустом месте возник — были же X-15 (даже в космос залетал) и «летающие ванны» M2-F1..M2-F3, HL-10.
С другой- Шаттл это беспримерно наглая попытка приравнять космический полёт к полёту на самолёте. Чего стоит хотя бы первый запуск- когда люди полетели в космос на никогда не испытанной системе (1ю ступень даже никогда не включали в вертикальном положении до этого, планер звуковой барьер не переходил).
Всё жи биснесмены рискуют меньше- даже SpaceShipOne постепенно поднимается в космос.

>> 14 человек, имхо, сравнивать с Союзом некорректно — всё-таки половина из них погибли при посадке, где у Союза тоже нет САС.

Согласен- при взлёте 7:0 счёт, при посадке 7:4 (а по полётам вообще 1:2).
> А если подумать то двигатели создаются под ракету

Почитайте историю F-1. Когда его начали делать — даже первый спутник ещё не полетел, куда там лунной программе…

Information

Rating
Does not participate
Location
Самара, Самарская обл., Россия
Date of birth
Registered
Activity