[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]

Файл: -(76 KB, 537x536)
76 No.3905324  

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

Например:
namespace Touhou
{

interface IЛетающий
{
void Летать();
}
class ЛететьБыстро : IЛетающий
{
private string описание = "Быстрый полет";
    public void Летать()
{
/*Реализация*/
}
}
interface IСпелкарта
{
void ИспользоватьСпелкарту();
}
class ЗнакМорозаИгольчатыйЛёд : IСпелкарта
{
private string описание = "Использована спелл-карта «Знак мороза „Игольчатый лёд“»";
    public void ИспользоватьСпелкарту()
{
/*Реализация*/
}
}
interface IУмножить4на2
{
void Умножить4на2();
}
class Математика
{
private string описание = "Найти Тройной Интеграл";
    public void НайтиТройнойИнтеграл()
{
/*Реализация*/
}
}
class Гений : IУмножить4на2
{
private string описание = "9";
    public void Умножить4на2()
{
/*Реализация*/
Математика математика = new Математика();
математика.НайтиТройнойИнтеграл();
/*Реализация*/
}
}
class Тоходевочка
{
private IЛетающий _летающий;
private IСпелкарта _спелкарта;
private IУмножить4на2 _умножить4На2;
private string описание;
    public Тоходевочка(IЛетающий летающий, IСпелкарта спелкарта, IУмножить4на2 умножить4На2, string описание)
{
_летающий = летающий;
_спелкарта = спелкарта;
_умножить4На2 = умножить4На2;
this.описание = описание;
}
    public void Летать();
{
_летающий.Летать();
}
    public void ИспользоватьСпелкарту();
{
_спелкарта.ИспользоватьСпелкарту();
}
    public void Умножить4на2();
{
_умножить4На2.Умножить4на2();
}
    public string ПолучитьОписание()
{
/* ??? */
}
}
class Program
{
static void Main(string[] args)
{
Тоходевочка Сырно = new Тоходевочка(new ЛететьБыстро(), new ЗнакМорозаИгольчатыйЛёд(), new Гений(), "Сырно не бака");
Сырно.Летать();
Сырно.ИспользоватьСпелкарту();
Сырно.Умножить4на2();
Сырно.ПолучитьОписание();
}
}

}

Я хочу получить в итоге описание: Быстрый полет Использована спелл-карта «Знак мороза „Игольчатый лёд“» Найти Тройной Интеграл 9

>> No.3905328  

Ничего не понял.

>> No.3905360  

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

>> No.3905383  

>>3905360
Для какого каждого класса? Который вообще возможен? grep. Для тех, что есть в системе? Ну запроси каждый объект и посмотри переменную. Хулъ ты хочешь-то?

>> No.3905394  

>>3905383

>Для какого каждого класса? Который вообще возможен?

Да, я погорячился. Нужны лишь классы, которые были использованы в неком корневом классе (class Тоходевочка).

>Ну запроси каждый объект и посмотри переменную. Хулъ ты хочешь-то?

Найти изящный способ запроса.

>> No.3905414  

>>3905394

>Найти изящный способ запроса.

Функция, что оверрайдится в каждом классе.

>> No.3905500  

>>3905394
Запили синглтон, пусть каждая Тоходевочка в конструкторе запихивает ему в массив свое описание, если конструктор вызывается в первый раз.

>> No.3905506  

>>3905500
Алсо, исходя из задачи, луче описание делать не private string, а private static final string.

>> No.3905528  

А можно ли переменные объединять в наборы, а наборы - ещё в наборы? Ну, например категория Fairies=>Cirno=>Spellcards=>Diamond_Blizzard=>Stats=>Damage.

>> No.3905539  

>>3905528
Дерево обходить бы было легко. Но не всегда данные можно представить в таком виде.

>> No.3905551  

>>3905539
А есть ли визуализаторы таких "деревьев", в которые вводишь исходный код, а он выдаёт тебе уже "дерево"? Идеально было бы, если бы ещё была возможность редактировать.

>> No.3905553  
Файл: -(67 KB, 499x356)
67

>>3905324
for *class* in *classes*
{
*result* += *class*.*variable*
}

class - переменная подкласса
classes - список всех подклассов
result - список значений переменных подклассов
variable - переменные подкласса, где хранятся необходимые значения
мимо-ни-разу-нихрена-не-кодивший

>> No.3905702  
Файл: -(265 KB, 537x759)
265
> public Тоходевочка(IЛетающий летающий, IСпелкарта спелкарта, IУмножить4на2 умножить4На2, string описание)

Тут очень логично бы использовать множественное наследование, зачем ты его не используешь, оборачивая каждый метод каждого интерфейса?!

>> No.3905706  

>>3905702
C# не может в множественное наследование.

>> No.3905714  

>>3905706
Ого! А как же вы, бедные, пишете энтерпрайз код? Я понимаю, на модельной задачке из 100 строк можно засунуть гордость куда подальше и заняться обезьяньей работой, но как в коммерческой разработке?

>> No.3905729  

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

>> No.3905748  

>>3905714
Можно наследоваться от множества интерфейсов, но не от множества классов.

>> No.3905804  
Файл: -(0 KB, 24x15)
0

>>3905324

>изящный способ решения проблемы

Не использовать жабу.




[d | an-b-bro-fr-gf-hr-l-m-maid-med-mi-mu-ne-o-old_o-p-ph-r-s-sci-sp-t-tran-tv-w-x | bg-vg | au-mo-tr | a-aa-abe-azu-c-dn-fi-hau-jp-ls-ma-me-rm-sos-tan-to-vn | misc-tenma-vndev | dev-stat]
[Burichan] [Futaba] [Gurochan] [Tomorrow] [Архив-Каталог-RSS] [Главная]