Иерархия классов
Классы "протон, нейтрон, электрон и фотон" будут наследоваться от абстрактного класса "Элементарные частицы", а оставшиеся элементы к чему привязывать? У меня есть препдоложение, что атом, ядро и ион можно наследовать от еще одного абстрактного класса "составные частицы", но я не уверен в правильности...
{
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);
}
Элементарные частицы // Базовый класс
Протон : Элементарные частицы
Нейтрон : Элементарные частицы
Электрон : Элементарные частицы
Фотон : Элементарные частицы
Ядро : Протон, Нейтрон
Атом : Ядро, Электрон, Фотон
Химический элемент : Атом
Ион : Химический элемент
Химическая реакция : Химический элемент
Элементарные частицы // Базовый класс
Протон : Элементарные частицы
Нейтрон : Элементарные частицы
Электрон : Элементарные частицы
Фотон : Элементарные частицы
Ядро : Протон, Нейтрон
Атом : Ядро, Электрон, Фотон
Химический элемент : Атом
Ион : Химический элемент
Химическая реакция : Химический элемент
Насколько я знаю, у базового класса может быть несколько наследников, но у наследника не может быть несколько базовых классов, а это то что вы мне предлагаете. Если я ошибаюсь, приведите пожалуйста код программы.
Насколько я знаю, у базового класса может быть несколько наследников, но у наследника не может быть несколько базовых классов
но вообщето кроме наследования есть еще и агрегация либо композиция например. Частица может наследовать от элементарной частицы (ЭЦ) - ядро же (опять же например) может наследовать, а может и нет - зависит от того, что вы хотите реализовать. Но в тоже время ядро агрегирует наследников ЭЦ.
Какие задачи должна рещать модель - исходя из этого должно проектироваться наследование и пр.
Насколько я знаю, у базового класса может быть несколько наследников, но у наследника не может быть несколько базовых классов
но вообщето кроме наследования есть еще и агрегация либо композиция например. Частица может наследовать от элементарной частицы (ЭЦ) - ядро же (опять же например) может наследовать, а может и нет - зависит от того, что вы хотите реализовать. Но в тоже время ядро агрегирует наследников ЭЦ.
Какие задачи должна рещать модель - исходя из этого должно проектироваться наследование и пр.
Вообще задача звучит так: Реализовать иерархию классов согласно варианту задания. Классы должны содержать поля, свойства, обычные и виртуальные методы. Виртуальные методы должны иметь разную реализацию в базовых и производных классах. Создать программу, демонстрирующую работу классов.
Это называется множественным наследованием, синтаксис которого легко найти в любом источнике. Думаю Вы сейчас порадовались, что выбрали для изучения именно C++, ведь там есть еще и виртуальное наследование. Тот пример иерархии, который я привел, примерно отражает связь этих объектов с точки зрения физики. Отталкиваясь, от физической концепции можно реализовать виртуальные методы, возвращающие или изменяющие физические характеристики этих объектов.
Это называется множественным наследованием, синтаксис которого легко найти в любом источнике. Думаю Вы сейчас порадовались, что выбрали для изучения именно C++, ведь там есть еще и виртуальное наследование. Тот пример иерархии, который я привел, примерно отражает связь этих объектов с точки зрения физики. Отталкиваясь, от физической концепции можно реализовать виртуальные методы, возвращающие или изменяющие физические характеристики этих объектов.
Прости, но мне надо реализовать это на С#, и там нет множественного наследования.
Да ничего. Просто объяснить преподу, научился ли ученик абстрагироваться от реальности чего угодно окружающего мира, и описать объекты мира каким-то программным языком.
Да ничего. Просто объяснить преподу, научился ли ученик абстрагироваться от реальности чего угодно окружающего мира, и описать объекты мира каким-то программным языком.
Доподлинно известно, что на C# объекты мира описать невозможно. Без общей картины любая ОО-модель будет неправильной.
Вообще задача звучит так: Реализовать иерархию классов согласно варианту задания. Классы должны содержать поля, свойства, обычные и виртуальные методы. Виртуальные методы должны иметь разную реализацию в базовых и производных классах. Создать программу, демонстрирующую работу классов.
Вообще использование агрегации и композиции условию задачи никак не противоречит. Все что необходимо - создать абстрактный класс ЭЦ (элементарной частицы) и необходимые виртуальные функции, которые будут перегружаться в классах-наследниках. И вперед. Причем никакой необходимости во множественном наследовании я здесь совершенно не вижу.
Элементарные частицы наследуют от абстрактного класса, составные частицы - наследуют от абстрактного класса и в качестве полей содержат указатели на массив элементарных частиц. Дальнейшее зависит от фантазии.
Элементарные частицы // Базовый класс
Протон : Элементарные частицы
Нейтрон : Элементарные частицы
Электрон : Элементарные частицы
Фотон : Элементарные частицы
Ядро : Протон, Нейтрон
Атом : Ядро, Электрон, Фотон
Химический элемент : Атом
Ион : Химический элемент
Химическая реакция : Химический элемент
Эта иерархия тоже не совсем верна, во 1ых Атом никак не может наследоваться от фотона, фотон это безмассовая частица движущаяся со скоростью света, думаю, что вы просто опечатались, во 2ых Химический элемент это не атом, он не может наследоваться от атома тоже самое с ионом.
Какая из этих иерархий будет верной?
Во вторых, атом естественно не может наследовать от фотона, но атом в ряде физических и химических взаимодействий этот самый фотон излучает. Если ваша модель не будет этого учитывать - она не пройдет проверку на соответствие закону сохранения энергии.
ну или поглощает естественно.
ну это если ТС решит столь детально моделировать - то конечно же да. Но что-то мне подсказывает что он надеется на то, что кто-то решит задачу за него. Дабы эти надежды развеять - мы можем еще и переходы между орбитами учитывать и еще много чего.
Но код придется писать все же самому. А если не нравиться - так в мире есть множество почетных профессий, где нет необходимости решать столь "сложные" задачи. Например ефрейтор или сержант ;)
ну это если ТС решит столь детально моделировать - то конечно же да. Но что-то мне подсказывает что он надеется на то, что кто-то решит задачу за него. Дабы эти надежды развеять - мы можем еще и переходы между орбитами учитывать и еще много чего.
Но код придется писать все же самому. А если не нравиться - так в мире есть множество почетных профессий, где нет необходимости решать столь "сложные" задачи. Например ефрейтор или сержант ;)
Ха-ха, хорошая шутка про армию, возьми пряник с полки.
Я не прошу написать за меня программу, я попросил помочь мне разобраться с иерархией. Для создания верной иерархии помимо имеющихся из списка эл-ов нужно вводить свои такие как "элементарные частицы" и т.д., а я не на столько силен в химии с физикой.
Это вовсе не шутка - для тебя это хорошее решение, зачем ломать себе жизнь обучаясь в ВШ? Зря время потратишь. А так дослужишься до ефрейтора, а там глядишь - и прапорщиком станешь.
Причем тут "физика с химией"? Верная модель - это какая? Каким условиям она должна отвечать? Не пробовал задать себе эти вопросы?
Это вовсе не шутка - для тебя это хорошее решение, зачем ломать себе жизнь обучаясь в ВШ? Зря время потратишь. А так дослужишься до ефрейтора, а там глядишь - и прапорщиком станешь.
Причем тут "физика с химией"? Верная модель - это какая? Каким условиям она должна отвечать? Не пробовал задать себе эти вопросы?
Еще одна великолепная шутка, вы не сын Петросяна? Не всем легко дается программирование, это большой труд требующий много времени. И я не виноват, что я не имею столько времени. Я только начал программировать на С#, а вы наверно уже не первый год программируете на этом языке, поэтому я и обратился сюда, чтобы мне что-то подсказали, а не насмехались и писали свои высказывания по поводу моей необразованности в этой теме.
Причем тут "физика с химией"? Без малейших знаний этих дисциплин точно ничего правильного не написать. Верная модель - это какая? Та модель которая будет соблюдать правила наследования, а не на обум написанная иерархия. Еслиб всего этого не нужно было знать, я бы сделал "химич. элем." абстрактным классом и от него написал бы наследники( все оставшееся элементы из списка с заданием).
Думаю, что для Вашего задания любая иерархия подойдет (хоть правильная, хоть неправильная). Главное описать ее на языке C#. В моем примере есть множественное наследование (которое формально не поддерживается этим языком), и тем не менее эту проблему можно обойти и на C#. Если задание - реализовать иерархию, то без "наследования" в том или ином виде не обойтись.
З.Ы.
Может атом и не стоит наследовать от фотона, но приниматься как аргумент обязан.
З.Ы. З.Ы.
Масса фотона в покое равна нулю, в остальных случаях отлична от нуля (в вакууме масса фотона равна m = E/(c*c)).
Думаю, что для Вашего задания любая иерархия подойдет (хоть правильная, хоть неправильная). Главное описать ее на языке C#.
Еслиб это было так, я бы уже сдал это задание))
Думаю, что для Вашего задания любая иерархия подойдет (хоть правильная, хоть неправильная). Главное описать ее на языке C#.
Еслиб это было так, я бы уже сдал это задание))
Тогда как Вы определяете какая иерархия правильна а какая нет? Я, вот, утверждаю, что моя правильна. Какие у Вас основания считать ее неправильной? Какая правильная?
И я не виноват, что я не имею столько времени. Я только начал программировать на С#, а вы наверно уже не первый год программируете на этом языке, поэтому я и обратился сюда, чтобы мне что-то подсказали, а не насмехались и писали свои высказывания по поводу моей необразованности в этой теме.
Во-первых над тобой еще даже не начали насмехаться. Во-вторых, тот кто не имеет времени, должен иметь как минимум деньги, для того что бы оплатить чужое время. Это аксиома. В третьих - имеется существенная разница - помочь можно тому, кто что-то делает. Мало сказать - это не подходит - требуется представить свое решение, и кроме того достаточно верно сформулировать вопрос, что именно не подходит. Форум - это не стол заказов - и никто не будет тратить свое время только потому, что ты не хочешь тратить свое. Это твоя проблема - и твоя задача. И то что у тебя нет времени на нее - это подробности, которые мало кого интересуют.
все предложенные модели соблюдают мифические "правила наследования". А правильная модель - это модель описывающая определенный процесс с допустимыми погрешностями и позволяющая получать и предсказывать его результаты.
Там мало общего с моим вариантом. Я себе представляю эту иерархию так:
На счет фотона; можно не наследовать от него.
Но код придется писать все же самому. А если не нравиться - так в мире есть множество почетных профессий, где нет необходимости решать столь "сложные" задачи. Например ефрейтор или сержант ;)
и это
не является насмешкой, то это ка минимум не красиво с вашей стороны.