Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Иерархия классов

87K
25 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Пожалуйста подскажите правильную иерархию классов для этого списка: "Ядро атома, протон, нейтрон, электрон, фотон, атом, химический элемент, ион, химическая реакция." Просьба не отправлять меня по этой ссылке: http://forum.codenet.ru/q72184/%D0%A0%D0%B5%D0%B0%D0%BB%D0%B8%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D1%8C+%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D1%8E+%D0%BA%D0%BB%D0%B0%D1%81%D1%81%D0%BE%D0%B2?s=0#answer_375809 эта реализация мне не подходит.

Классы "протон, нейтрон, электрон и фотон" будут наследоваться от абстрактного класса "Элементарные частицы", а оставшиеся элементы к чему привязывать? У меня есть препдоложение, что атом, ядро и ион можно наследовать от еще одного абстрактного класса "составные частицы", но я не уверен в правильности...



Код:
public abstract class Elem_Chast
    {
        public string nazvanie;
        public string simvol;
        public double massa;
        public string elektr_zariad;
        public string antichast;
        public double vremia_gizni;
        public abstract void Info();

        public string Nazvanie
        {
            get { return nazvanie; }
            set { nazvanie = value; }
        }

        public string Simvol
        {
            get { return simvol; }
            set { simvol = value; }
        }

        public double Massa
        {
            get { return massa; }
            set { massa = value; }
        }

        public string Electr_zariad
        {
            get { return elektr_zariad; }
            set { elektr_zariad = value; }
        }

        public string Antichast
        {
            get { return antichast; }
            set { antichast = value; }
        }

        public double Vremia_gizni
        {
            get { return vremia_gizni; }
            set { vremia_gizni = value; }
        }
    }

    public class Proton : Elem_Chast
    {
        public int kol_vo;

        public int Kol_vo
        {
            get { return kol_vo; }
            set { kol_vo = value; }
        }

        public override void Info()
        {
            System.Console.WriteLine("Nazvanie = {0}\nSimvol = {1}\nMassa = {2}\nElektr_zariad = {3}\nAntishastica = {4}\nVremia_gizni = {5}\nKol_vo = {6}",
                base.nazvanie, base.simvol, base.massa, base.elektr_zariad, base.antichast, base.vremia_gizni, kol_vo);
        }
    }

    public class Elektron : Elem_Chast
    {
        public int kol_vo;

        public override void Info()
        {
            System.Console.WriteLine("Nazvanie = {0}\nSimvol = {1}\nMassa = {2}\nElektr_zariad = {3}\nAntishastica = {4}\nVremia_gizni = {5}\nKol_vo = {6}",
                base.nazvanie, base.simvol, base.massa, base.elektr_zariad, base.antichast, base.vremia_gizni, kol_vo);
        }

    }

    public class Neytron : Elem_Chast
    {
        public int kol_vo;

        public int Kol_vo
        {
            get { return kol_vo; }
            set { kol_vo = value; }
        }
        public override void Info()
        {
            System.Console.WriteLine("Nazvanie = {0}\nSimvol = {1}\nMassa = {2}\nElektr_zariad = {3}\nAntishastica = {4}\nVremia_gizni = {5}\nKol_vo = {6}",
                base.nazvanie, base.simvol, base.massa, base.elektr_zariad, base.antichast, base.vremia_gizni, kol_vo);
        }
    }

    public class Foton : Elem_Chast
    {
        public override void Info()
        {
            System.Console.WriteLine("Nazvanie = {0}\nSimvol = {1}\nMassa = {2}\nElektr_zariad = {3}\nAntishastica = {4}\nVremia_gizni = {5}",
                base.nazvanie, base.simvol, base.massa, base.elektr_zariad, base.antichast, base.vremia_gizni);
        }
446
25 апреля 2013 года
Meander
487 / / 04.09.2011
Чем такая архитектура не устраивает?

Элементарные частицы // Базовый класс
Протон : Элементарные частицы
Нейтрон : Элементарные частицы
Электрон : Элементарные частицы
Фотон : Элементарные частицы
Ядро : Протон, Нейтрон
Атом : Ядро, Электрон, Фотон
Химический элемент : Атом
Ион : Химический элемент
Химическая реакция : Химический элемент
87K
25 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Цитата: Meander
Чем такая архитектура не устраивает?

Элементарные частицы // Базовый класс
Протон : Элементарные частицы
Нейтрон : Элементарные частицы
Электрон : Элементарные частицы
Фотон : Элементарные частицы
Ядро : Протон, Нейтрон
Атом : Ядро, Электрон, Фотон
Химический элемент : Атом
Ион : Химический элемент
Химическая реакция : Химический элемент



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

1
25 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: Kesha_KOst


Насколько я знаю, у базового класса может быть несколько наследников, но у наследника не может быть несколько базовых классов


но вообщето кроме наследования есть еще и агрегация либо композиция например. Частица может наследовать от элементарной частицы (ЭЦ) - ядро же (опять же например) может наследовать, а может и нет - зависит от того, что вы хотите реализовать. Но в тоже время ядро агрегирует наследников ЭЦ.
Какие задачи должна рещать модель - исходя из этого должно проектироваться наследование и пр.

87K
25 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Цитата: kot_
Цитата: Kesha_KOst


Насколько я знаю, у базового класса может быть несколько наследников, но у наследника не может быть несколько базовых классов


но вообщето кроме наследования есть еще и агрегация либо композиция например. Частица может наследовать от элементарной частицы (ЭЦ) - ядро же (опять же например) может наследовать, а может и нет - зависит от того, что вы хотите реализовать. Но в тоже время ядро агрегирует наследников ЭЦ.
Какие задачи должна рещать модель - исходя из этого должно проектироваться наследование и пр.



Вообще задача звучит так: Реализовать иерархию классов согласно варианту задания. Классы должны содержать поля, свойства, обычные и виртуальные методы. Виртуальные методы должны иметь разную реализацию в базовых и производных классах. Создать программу, демонстрирующую работу классов.

446
26 апреля 2013 года
Meander
487 / / 04.09.2011
Цитата: Kesha_KOst
Насколько я знаю, у базового класса может быть несколько наследников, но у наследника не может быть несколько базовых классов, а это то что вы мне предлагаете. Если я ошибаюсь, приведите пожалуйста код программы.


Это называется множественным наследованием, синтаксис которого легко найти в любом источнике. Думаю Вы сейчас порадовались, что выбрали для изучения именно C++, ведь там есть еще и виртуальное наследование. Тот пример иерархии, который я привел, примерно отражает связь этих объектов с точки зрения физики. Отталкиваясь, от физической концепции можно реализовать виртуальные методы, возвращающие или изменяющие физические характеристики этих объектов.

87K
26 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Цитата: Meander
Цитата: Kesha_KOst
Насколько я знаю, у базового класса может быть несколько наследников, но у наследника не может быть несколько базовых классов, а это то что вы мне предлагаете. Если я ошибаюсь, приведите пожалуйста код программы.


Это называется множественным наследованием, синтаксис которого легко найти в любом источнике. Думаю Вы сейчас порадовались, что выбрали для изучения именно C++, ведь там есть еще и виртуальное наследование. Тот пример иерархии, который я привел, примерно отражает связь этих объектов с точки зрения физики. Отталкиваясь, от физической концепции можно реализовать виртуальные методы, возвращающие или изменяющие физические характеристики этих объектов.



Прости, но мне надо реализовать это на С#, и там нет множественного наследования.

446
26 апреля 2013 года
Meander
487 / / 04.09.2011
Здесь небольшая дискуссия по этому вопросу.
341
26 апреля 2013 года
Der Meister
874 / / 21.12.2007
А что прога делать-то должна? Приведите текст задания полностью.
8
26 апреля 2013 года
mfender
3.5K / / 15.06.2005
Цитата: Der Meister
А что прога делать-то должна? Приведите текст задания полностью.


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

341
26 апреля 2013 года
Der Meister
874 / / 21.12.2007
Цитата: mfender
Цитата: Der Meister
А что прога делать-то должна? Приведите текст задания полностью.


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

Доподлинно известно, что на C# объекты мира описать невозможно. Без общей картины любая ОО-модель будет неправильной.

1
26 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: Kesha_KOst

Вообще задача звучит так: Реализовать иерархию классов согласно варианту задания. Классы должны содержать поля, свойства, обычные и виртуальные методы. Виртуальные методы должны иметь разную реализацию в базовых и производных классах. Создать программу, демонстрирующую работу классов.


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

87K
26 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Цитата: Meander
Чем такая архитектура не устраивает?

Элементарные частицы // Базовый класс
Протон : Элементарные частицы
Нейтрон : Элементарные частицы
Электрон : Элементарные частицы
Фотон : Элементарные частицы
Ядро : Протон, Нейтрон
Атом : Ядро, Электрон, Фотон
Химический элемент : Атом
Ион : Химический элемент
Химическая реакция : Химический элемент



Эта иерархия тоже не совсем верна, во 1ых Атом никак не может наследоваться от фотона, фотон это безмассовая частица движущаяся со скоростью света, думаю, что вы просто опечатались, во 2ых Химический элемент это не атом, он не может наследоваться от атома тоже самое с ионом.

Какая из этих иерархий будет верной?

1
26 апреля 2013 года
kot_
7.3K / / 20.01.2000
Во-первых, обе никуда не годятся.
Во вторых, атом естественно не может наследовать от фотона, но атом в ряде физических и химических взаимодействий этот самый фотон излучает. Если ваша модель не будет этого учитывать - она не пройдет проверку на соответствие закону сохранения энергии.
1
26 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: kot_
атом в ряде физических и химических взаимодействий этот самый фотон излучает.


ну или поглощает естественно.

20K
26 апреля 2013 года
ellor!
198 / / 24.05.2012
Ну тогда уж не сам атом испускает фотоны, а его ядро или электронная оболочка.
1
26 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: ellor!
Ну тогда уж не сам атом испускает фотоны, а его ядро или электронная оболочка.


ну это если ТС решит столь детально моделировать - то конечно же да. Но что-то мне подсказывает что он надеется на то, что кто-то решит задачу за него. Дабы эти надежды развеять - мы можем еще и переходы между орбитами учитывать и еще много чего.
Но код придется писать все же самому. А если не нравиться - так в мире есть множество почетных профессий, где нет необходимости решать столь "сложные" задачи. Например ефрейтор или сержант ;)

87K
26 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Цитата: kot_
Цитата: ellor!
Ну тогда уж не сам атом испускает фотоны, а его ядро или электронная оболочка.


ну это если ТС решит столь детально моделировать - то конечно же да. Но что-то мне подсказывает что он надеется на то, что кто-то решит задачу за него. Дабы эти надежды развеять - мы можем еще и переходы между орбитами учитывать и еще много чего.
Но код придется писать все же самому. А если не нравиться - так в мире есть множество почетных профессий, где нет необходимости решать столь "сложные" задачи. Например ефрейтор или сержант ;)



Ха-ха, хорошая шутка про армию, возьми пряник с полки.

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

1
26 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата:
Ха-ха, хорошая шутка про армию, возьми пряник с полки.


Это вовсе не шутка - для тебя это хорошее решение, зачем ломать себе жизнь обучаясь в ВШ? Зря время потратишь. А так дослужишься до ефрейтора, а там глядишь - и прапорщиком станешь.
Причем тут "физика с химией"? Верная модель - это какая? Каким условиям она должна отвечать? Не пробовал задать себе эти вопросы?

87K
26 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Цитата: kot_
Цитата:
Ха-ха, хорошая шутка про армию, возьми пряник с полки.


Это вовсе не шутка - для тебя это хорошее решение, зачем ломать себе жизнь обучаясь в ВШ? Зря время потратишь. А так дослужишься до ефрейтора, а там глядишь - и прапорщиком станешь.
Причем тут "физика с химией"? Верная модель - это какая? Каким условиям она должна отвечать? Не пробовал задать себе эти вопросы?



Еще одна великолепная шутка, вы не сын Петросяна? Не всем легко дается программирование, это большой труд требующий много времени. И я не виноват, что я не имею столько времени. Я только начал программировать на С#, а вы наверно уже не первый год программируете на этом языке, поэтому я и обратился сюда, чтобы мне что-то подсказали, а не насмехались и писали свои высказывания по поводу моей необразованности в этой теме.
Причем тут "физика с химией"? Без малейших знаний этих дисциплин точно ничего правильного не написать. Верная модель - это какая? Та модель которая будет соблюдать правила наследования, а не на обум написанная иерархия. Еслиб всего этого не нужно было знать, я бы сделал "химич. элем." абстрактным классом и от него написал бы наследники( все оставшееся элементы из списка с заданием).

446
26 апреля 2013 года
Meander
487 / / 04.09.2011
Цитата: Kesha_KOst
Эта иерархия тоже не совсем верна, во 1ых Атом никак не может наследоваться от фотона, фотон это безмассовая частица движущаяся со скоростью света, думаю, что вы просто опечатались, во 2ых Химический элемент это не атом, он не может наследоваться от атома тоже самое с ионом.



Думаю, что для Вашего задания любая иерархия подойдет (хоть правильная, хоть неправильная). Главное описать ее на языке C#. В моем примере есть множественное наследование (которое формально не поддерживается этим языком), и тем не менее эту проблему можно обойти и на C#. Если задание - реализовать иерархию, то без "наследования" в том или ином виде не обойтись.
З.Ы.
Может атом и не стоит наследовать от фотона, но приниматься как аргумент обязан.
З.Ы. З.Ы.
Масса фотона в покое равна нулю, в остальных случаях отлична от нуля (в вакууме масса фотона равна m = E/(c*c)).

87K
26 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Цитата: Meander
Цитата: Kesha_KOst
Эта иерархия тоже не совсем верна, во 1ых Атом никак не может наследоваться от фотона, фотон это безмассовая частица движущаяся со скоростью света, думаю, что вы просто опечатались, во 2ых Химический элемент это не атом, он не может наследоваться от атома тоже самое с ионом.



Думаю, что для Вашего задания любая иерархия подойдет (хоть правильная, хоть неправильная). Главное описать ее на языке C#.


Еслиб это было так, я бы уже сдал это задание))

446
26 апреля 2013 года
Meander
487 / / 04.09.2011
Цитата: Kesha_KOst
Цитата: Meander
Цитата: Kesha_KOst
Эта иерархия тоже не совсем верна, во 1ых Атом никак не может наследоваться от фотона, фотон это безмассовая частица движущаяся со скоростью света, думаю, что вы просто опечатались, во 2ых Химический элемент это не атом, он не может наследоваться от атома тоже самое с ионом.



Думаю, что для Вашего задания любая иерархия подойдет (хоть правильная, хоть неправильная). Главное описать ее на языке C#.


Еслиб это было так, я бы уже сдал это задание))


Тогда как Вы определяете какая иерархия правильна а какая нет? Я, вот, утверждаю, что моя правильна. Какие у Вас основания считать ее неправильной? Какая правильная?

87K
26 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
вот примерная иерархия которую вы предложили
А вот комментарий одного из участников форума
Цитата:
Во-первых, обе никуда не годятся.
Во вторых, атом естественно не может наследовать от фотона, но атом в ряде физических и химических взаимодействий этот самый фотон излучает. Если ваша модель не будет этого учитывать - она не пройдет проверку на соответствие закону сохранения энергии.

1
26 апреля 2013 года
kot_
7.3K / / 20.01.2000
Цитата: Kesha_KOst

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


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

Цитата:
Та модель которая будет соблюдать правила наследования, а не на обум написанная иерархия


все предложенные модели соблюдают мифические "правила наследования". А правильная модель - это модель описывающая определенный процесс с допустимыми погрешностями и позволяющая получать и предсказывать его результаты.

446
26 апреля 2013 года
Meander
487 / / 04.09.2011
Цитата: Kesha_KOst
вот примерная иерархия которую вы предложили
А вот комментарий одного из участников форума
Цитата:
Во-первых, обе никуда не годятся.
Во вторых, атом естественно не может наследовать от фотона, но атом в ряде физических и химических взаимодействий этот самый фотон излучает. Если ваша модель не будет этого учитывать - она не пройдет проверку на соответствие закону сохранения энергии.


Там мало общего с моим вариантом. Я себе представляю эту иерархию так:

На счет фотона; можно не наследовать от него.

87K
27 апреля 2013 года
Kesha_KOst
10 / / 25.04.2013
Если это
Цитата:
ну это если ТС решит столь детально моделировать - то конечно же да. Но что-то мне подсказывает что он надеется на то, что кто-то решит задачу за него. Дабы эти надежды развеять - мы можем еще и переходы между орбитами учитывать и еще много чего.
Но код придется писать все же самому. А если не нравиться - так в мире есть множество почетных профессий, где нет необходимости решать столь "сложные" задачи. Например ефрейтор или сержант ;)

и это

Цитата:
Это вовсе не шутка - для тебя это хорошее решение, зачем ломать себе жизнь обучаясь в ВШ? Зря время потратишь. А так дослужишься до ефрейтора, а там глядишь - и прапорщиком станешь.

не является насмешкой, то это ка минимум не красиво с вашей стороны.

326
27 апреля 2013 года
sadovoya
757 / / 19.11.2005
Во времена зарождения ООП любили пофилософствовать на тему, что ООП естественно, поскольку имеет аналогии с реальным миром. И начали все выстраивать в иерархии по образу и подобию с логикой жизни. Сейчас многие заметили вред от такой установки. На самом деле иерархия должна позволять наиболее оптимально производить наследования, полиморфизм и т.д. Поддерживать жизненный цикл проекта, повторное использование и развитие кода -- и все! Вовсе не обязательно ей отвечать "логике жизни". Например, "зебра" -- это просто объемнаю фигура, или другая объемная фигура (лошадь) с полосками, если вы занимаетесь программированием графики. Это так, отступление... В вашей задаче все свести к скозной иерархии -- будет натяжкой. Лучше использовать наследование и владение. kot_ правильно вам советовал.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог