Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Присвоение класса в ветвлении / 9 сообщений из 9, страница 1 из 1
06.09.2018, 11:50
    #39698916
energy75
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
Добрый день всем.


Прошу натолкнуть на мысль, как профессионалы реализовывают следующую задачу:

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

Есть процедура, в которой в зависимости от входных условий необходимо в операторе ветвления объявить переменную выбранного в зависимости от условия класса. Далее, за оператором ветвления необходимо работать с этой переменной.

Но дело в том, что переменная объявленная в операторе ветвления не видна за его пределами. Да, понимаю, можно написать множество функций и в ветвлении обращаться к ним. Но поддержка такого кода тот еще геморр.

Очень прошу подсказать решение. Если вводная не понятна, пишите, попробую добавить, разъяснить.

Спасибо.
...
Рейтинг: 0 / 0
06.09.2018, 12:04
    #39698923
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
Для этого наследование придумали. Сделай общий базовый класс, а свои классы унаследуй от него и все твои проблемы исчезнут.
...
Рейтинг: 0 / 0
06.09.2018, 13:00
    #39698966
Дмитрий Мух
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
energy75Добрый день всем.


Прошу натолкнуть на мысль, как профессионалы реализовывают следующую задачу:

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

Есть процедура, в которой в зависимости от входных условий необходимо в операторе ветвления объявить переменную выбранного в зависимости от условия класса. Далее, за оператором ветвления необходимо работать с этой переменной.

Но дело в том, что переменная объявленная в операторе ветвления не видна за его пределами. Да, понимаю, можно написать множество функций и в ветвлении обращаться к ним. Но поддержка такого кода тот еще геморр.

Очень прошу подсказать решение. Если вводная не понятна, пишите, попробую добавить, разъяснить.

Спасибо.
Язык какой? Шаблон Стратегия.
...
Рейтинг: 0 / 0
06.09.2018, 14:00
    #39699033
energy75
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
Dima T, Дмитрий Мух, спасибо за участие.


с наследованием немного знаком, но, понятное дело недостаточно. Не сдвинулся я с места, не хватает знаний, как прикрутить.

Ну, допустим, вот наши классы:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Papa
{
    public string param1 { get; set; }
    public Int32 param2 { get; set; }
}


public class Child1 : Papa
{
    public Int32 diablo(Int32 inVar)
    {
        return inVar * 10;
    }
}

public class Child2 : Papa
{
    public Int32 diablo(Int32 inVar)
    {
        return inVar * 2000;
    }
}


И вот нам надо их поюзать:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public void rr(byte inVar)
{
    switch (inVar)
    {
        case 1:
            {
                Child1 ddd = new Child1();
                break;
            }

        case 2:
            {
                Child2 ddd = new Child2();
                break;
            }
    }


    Console.WriteLine(ddd.diablo(inVar));
}



Понятное дело, в последней строчке ошибка, нифига не сработает. Поправьте меня плиз.
Спасибо.
...
Рейтинг: 0 / 0
06.09.2018, 14:39
    #39699077
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
public class Papa
{
    public string param1 { get; set; }
    public Int32 param2 { get; set; }

    public Int32 diablo(Int32 inVar)
    {
        return 0;
    }
}
...

public void rr(byte inVar)
{
    Papa ddd;
    switch (inVar)
    {
        case 1:
            {
                ddd = new Child1();
                break;
            }

        case 2:
            {
                ddd = new Child2();
                break;
            }
    }


    Console.WriteLine(ddd.diablo(inVar));
}


И по синтаксису объявления и переопределения методов есть нюансы, зависит от ЯП. По C# можно почитать про наследование и про интерфейсы
...
Рейтинг: 0 / 0
06.09.2018, 15:18
    #39699106
energy75
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
Dima T, спасибо, вижу что сделал первый шаг.

Признаться, пишу на vb, а сюда постил на шарпе, понимая, что сообщество в основном на нём. К сожалению, сейчас нужно прикрепить принтскрин, поэтому и рождена эта строчка.


Итак. Сдвинулся с места, нашел собственно того, чего не доставало - Overloads , перегрузки. Ваш Return=0 к этому подвинул.
Итак, классы выглядят теперь вот так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Public Class Papa
    Public Property param1 As String
    Public Property param2 As Int32
    Public Function diablo(inVar As Int32) As Int32
        Return 0
    End Function

End Class


Public Class Child1
    Inherits Papa
    Public Overloads Function diablo(inVar As Int32) As Int32
        Return inVar * 10
    End Function
End Class

Public Class Child2
    Inherits Papa
    Public Overloads Function diablo(inVar As Int32) As Int32
        Return inVar * 2000
    End Function
End Class




Но основная задача не решена. Выбор класса в ветвлении. Ваш пример к сожалению с ошибкой:
...
Рейтинг: 0 / 0
06.09.2018, 15:24
    #39699111
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
energy75Но основная задача не решена. Выбор класса в ветвлении. Ваш пример к сожалению с ошибкой:
Ты криво мой пример перевел, внутри select не надо Dim

Я не силен в VB.NET. Почитай
...
Рейтинг: 0 / 0
06.09.2018, 20:24
    #39699247
energy75
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
Dima T,

ОГРОМНОЕ СПАСИБО!!!!!!!!

Все получилось.
...
Рейтинг: 0 / 0
06.09.2018, 20:46
    #39699253
energy75
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Присвоение класса в ветвлении
Опубликую работающий код, вдруг кому....


Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
Public Class Papa
    Public Property param1 As String
    Public Property param2 As Int32
    Public Overridable Function Diablo(inVar As Int32) As Int32
        Return 555
    End Function

End Class


Public Class Child1
    Inherits Papa
    Public Overrides Function Diablo(inVar As Int32) As Int32
        Return inVar * 10
    End Function
End Class

Public Class Child2
    Inherits Papa
    Public Overrides Function diablo(inVar As Int32) As Int32
        Return inVar * 2000
    End Function
End Class
'******************************************************************
Module Module1

    Sub Main()
        Console.WriteLine(selection(1))
        Console.WriteLine(selection(2))
        Console.ReadLine()
    End Sub


'******************************************************************
    Public Function selection(inB As Byte) As Int32
        Dim myPapa As New Papa

        Select Case inB
            Case 1
                myPapa = New Child1
            Case 2
                myPapa = New Child2
        End Select

        Return myPapa.Diablo(inB)

    End Function
End Module
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Присвоение класса в ветвлении / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]