LINUX.ORG.RU

Ruby. Классы и взаимодействие

 


0

1

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

Полная задача звучит так: Сцотона принимает в жертву человеческие души. Но он может зохавать не каждую душу. Если у души нет имени он говорит: «Опять китаец... А нормальная еда есть?». Если возраст до 10 лет - он кричит: «Еще не успел нагрешить - скормите Исусу». В остальных случаях он говорит: «Спасибо за угощение. Юзернейм был вкусный!» Нужно выполнить в лучших традициях ооп и продемонстрировать код, где Сцотону кормят.

Я решила для начала немного упростить, что б хоть с чего-то начать. Например просто с 2-х классов и их вхаимодействия:


class Satana
  attr_accessor :name
end

satana = Satana.new
satana.name = "Satana"
puts satana.name #это что б просто было мне видно. что работает

class Soul
  def initialize(name,age)
    @name=name
    @age=age
  end

  def lolya
    puts "#{satana.name} eat #{@name}, she is #{@age} years. Did not have time to sin - Feed the Jesus."
  end
end

ann = Soul.new("Ann",5)
ann.lolya


#Я понимаю, что в последствии не видно имени Сатаны, но почему и как не пойму.

Я не прошу решить всю задачу (если есть желание я не против)главное,
 что я не так делаю и почему нет связи между классами? Заранее 
большое спасибо и если я не по теме - пожалуйста укажите куда можно
 обратится за помощью. 

почему нет связи между классами?

Потому что её нужно указывать явно. Либо у еды должен быть метод «скормить это», который принимает потребителя, либо у потребителя должен быть метод «потребить», который принимает экземпляр еды.

Ну и сами по себе объекты не разберутся, что кто делает. Нужны явные вызовы методов.

i-rinat ★★★★★
()
Ответ на: комментарий от rusich

Это муж мой такие придумывает Т__Т. Другие были проще (но не менее оригинальней), а с этим я чего-то застряла...

Svetl
() автор топика
Ответ на: комментарий от Svetl
class Satana
  def eat(soul)
    puts "eat #{soul.name}, she is #{soul.age} years."
  end
end

class Soul
  attr_reader :name, :age
  
  def initialize(name, age)
    @name = name
    @age = age
  end
end

satana = Satana.new

ann = Soul.new('Ann', 5)

satana.eat(ann)
TDrive ★★★★★
()
Ответ на: комментарий от i-rinat

Спасибо за ответ!А можно с примером? Для меня так лучше доходит Т_Т

Svetl
() автор топика
Ответ на: комментарий от TDrive

Спасибо большое! Я не с того края взялась за это)) Теперь понятно.

Svetl
() автор топика

Я понимаю, что в последствии не видно имени Сатаны, но почему и как не пойму.

Потому что в классе Soul нет никакого satana, он сам по себе.

INFOMAN ★★★★★
()
Ответ на: комментарий от INFOMAN

Спасибо. Я так и поняла, что я создала два отдельных класса и не смогла наладить их взаимодействие. Я видела проблему, в голове был свод правил, но что их так логично и просто применить сюда - я не могла понять. Спасибо примеру TDrive Незнаю может я как-то не правильно подхожу к самому процессу учебы, что могу комбинировать и повторять, что уже читала, но вот с новыми задачами торможу :(

Svetl
() автор топика

Сам сотона придумал этот язык.

ritsufag ★★★★★
()

я хочу решить задачу. 1. есть производители железа. 2. есть писатели дров. 3. есть игровая индустрия, развлечений, софт. 4. есть потребители индустрии, железа, дров, сота.

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

предположим, что текущий объем получаемых всеми вместе участниками задачи кроме 4 составляет 10уе. При этом из этих 10уе 1 получает 4уе, 2уе, 3уе. В добавок финансовые возможности 4 потенциально пригодные для 1,2,3 равняются 20уе.

Вопрос. Как сделать так чтоб все потенциально пригодные уе 4, направились к 1,2,3.

Задача взята из реального мира и сформировалась вчера. Далее сорян тс за легкий офтоп, но может тебе при создании новых задач инфа пригодится, если осилишь дочитать.

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

Далее под это железо пишутся дрова, что позволяет делать деньги 2. И как бы и они заинтересованы в том что бы 1 цедил нанометры ибо это им обеспечивает постоянные заказы.

И вот только 3 функционирует не в полную силу ибо постоянное обновление железа и дров влияет на качество софта и им (щас самое основное ибо с первыми двумя все понятно) приходится всем угождать, вести поддержку разнородного железа, дров, что само собой отнимает ресурсы человеческие и не до оптимизирует финансовые в итоге они не дополучают потенциальный доход. Недополучают они потому что, об их продукте во первых отзывы не стабильно положительные, что влияет на спрос, Во вторых потому что не могут увеличивать скорость из за совместимостей поколений железа, которые всегда надо учитывать. И в третьих потому что емкость рынка потенциальная не реализованна имха примерно на 40-50% в силу того что 1 и 2, в основном 1, выжимают максимум для себя из рынка.

К примеру есть 10 потребителей. 1 из них могут всегда обновить свое железо с выходом каждого нового поколения в первые дни, 2 в первые пол года, 3 могут в течении года, 4 вообще остаются за бортом (хотя потенциально готовы, хотят и могут вкладывать в индустрию за предоставленные развлечения определенные средства (часть недополученной индустрией состоящей из 1,2,3,4 прибыли на которую 1 забивает)).

2 тут вообщем привязан к 1.

С 3 самая интересная история, они делают херню, которая на половину бесполезна ибо пока делается одно наспех, пора переделывать, доделывать, что влияет на качество и спрос. В чем это выражается, тот кто может обновлять железо сразу например, пи чтении комментариев о нестабильности тех которые обновляют через год, на этапе выбора отказывается от продукта, как и половина остальных потребителей прочитавших комментарии о некачестве, дороговизне и т.д. В итоге из 10 основных продуктов, 5 берет который сразу, 5 шлет подальше из за отзывов, остальные берут на двоих 3 продукта и 7 шлют подальше из за несовместимости качества и т.д., а четверо которые без железа вообще не участвуют в этом процессе, хотя каждый из этих 10ти потенциально (опять это слово) готов донатить в софт, игры, гаджеты и т.д. вообщем в собственные развлечения если они удовлетворяют требованиям, даже на постоянной основе это делать и при надлежащем качестве с хорошими реальными отзывами, который сразу готов все 10 продуктов купить ибо позволяет, остальные вместо трех готовы 6 или 7 купить и те четверо готовы купить хотя бы 2 вскладчину но при наличии компов. И это все еще не учитывает, что если у 3 появляется возможность делать качественный софт и не парится о совместимости то они смогут делать не 10 единиц а например близко к 15, из которых при качестве который может купит все, остальные не 7 а 10-11, ну и четверо не 2, а 4 продукта. Таким образом мне кажется вся индустрия получает примерно 20 потенциальных уе, которые пользователи готовы в эту сферу вкладывать хотя поток средств основной пойдет через 3 и при этом окажется минитранзакционным.

Это все. Вот и подумал. Интересно если эта модель верна, то подтвердит ли она себя на практике. Если например объединить индустрию в финансовом плане, на долях или процентах (но по итогу каждый из них начнет получать больше чем до этого ибо 20/3 это минимум по 6уе, что больше чем каждый из них делает при обычном раскладе). Но при этом железо и дрова начнут выходить реже но без цедения по нанометру в год и сделает цены ниже, чтобы и эти четвера смоги себе позволить компы в дальнейшем донатя в развлечения(ведь ежу понятно, что например интел может хоть щас сделать 7нм если еще не 5 лет назад и упереться в реальный технический тупик, на выход из которого может и десять и более лет потребоваться (в течении которого кстати индустрия развлечений сможет делать качественный софт и иметь поток средств постоянный при чем прогрессировать в проф плане она станет гораздо эффективнее нежели щас это происходит), но она следует правилу насыщения емкости). А сфера развлечений начнет иметь постоянный поток средств, мелкотранзакционных.

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

вообщем если кто осилит, окажусь рад диалогу, тс еще раз сорян за офтоп, хотя думаю, удалять это сообщение :)

dima1981
()

решила освоить ruby

Осваивай лучше борщ и м-нет.
Программирование - не женское дело.

Novator ★★★★★
()
Ответ на: комментарий от anonymous

У тебя проблема с логикой, значит, ты - баба :)
Говорю же, иди вари борщ лучше )

Novator ★★★★★
()
Последнее исправление: Novator (всего исправлений: 1)

Satana должен быть синглтоном.

anonymous
()
Ответ на: комментарий от Novator

Вот такие у нас новаторы ретроградные

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.