Развернуть объектно-ориентированный код - PullRequest
1 голос
/ 02 октября 2010

Существуют ли какие-либо инструменты, расширяющие объектно-ориентированный код, чтобы не было никакого совместного использования?Например, если у меня есть два класса A и B, которые наследуют C, тогда инструмент настроит классы A и B, чтобы они больше не использовали C. Было бы также неплохо, если бы инструмент сделал это, и он все еще компилировался и давал те же результаты.Я думаю, что основной трудностью будет корректировка любой условной логики, если тип класса проверяется динамически.

Я знаю, что это совершенно бессмысленно с точки зрения машины, но это было бы забавное академическое упражнение.

Ответы [ 2 ]

2 голосов
/ 02 октября 2010

Хотя существуют различные инструменты рефакторинга, я сомневаюсь, что ваш вопрос имеет практическое применение, поскольку для выполнения такого рода автоматических манипуляций потребуются существенные контекстные знания и вмешательство человека.

В вашем примере это не простоДостаточно того, что A и B получают методы и свойства C, но тот факт, что во многих случаях есть места, где вы хотите передать A (или B) методу и рассматривать его как C. Или, вы можете захотеть передатьэто что-то, что принимает C, но вызывает специфическое поведение A (или B) - представьте коллекцию, которая вызывает .DoThing () для любого объекта внутри него.

Вы не должнытолько разбивают классы, но имеют все виды перегруженных функций с большим количеством избыточно выглядящего кода (особенно для типов, а не только для поведения).

Я бы сказал, что во время интересного мысленного эксперимента, возможно, мыследует поместить его в кучу плохих идей.Я сомневаюсь, что это поможет улучшить читабельность, расширяемость или производительность.

1 голос
/ 02 октября 2010

Проблема в том, что с кодом, использующим C, а не A или B, трудно справиться:

public void workWithSomeC( C useThis ) {  ... }

в нашем OO-коде мы можем передать A или B этой функции. Не могу этого сделать, если А и Б больше не имеют ничего общего.

Я бы подумал, что с помощью дублирования такого кода что-то можно заставить работать, но, черт возьми, какая ужасная идея; -)

...