LINUX.ORG.RU

Помогите кто сможет ;)


0

0

В методе void paint () я написал код рисования звезды.
смысл его прост:
создается полигон ;
в простом цикле заполняем его координатами звезды ;
рисуем .
Хочу оформить это в виде отдельного класса потому что звезд нужно много.
Как бы это сделать грамотно?
http://img718.imageshack.us/img718/5772/starg.png

Берешь методичку по лабам на Default Language и читаешь заново.

t184256 ★★★★★
()

Хочу оформить это в виде отдельного класса потому что звезд нужно много.

а что мешает тебе просто передать варьирующиеся параметры в функцию?

jtootf ★★★★★
()

Тысячи классов? Но вей :)

stave ★★★★★
()

еще раз подумай, зачем тебе здесь нужны классы?

потом подумай еще раз. И только потом реализовывай.

hired777
()
Ответ на: комментарий от jtootf

ТС> Хочу оформить это в виде отдельного класса потому что звезд нужно много.

jrootf> а что мешает тебе просто передать варьирующиеся параметры в функцию?

Методичка, в которой ТСу написали, что звезду нужно оформить как класс, а то не дай бог их нужно будет много. Еще потому зелененькую унаследовать, квадратик добавить и на этой синтетике соорудить иллюзию понимания наследования и полиморфизма.

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

на самом деле на яве пытаюсь писать второй день.
знаю только С.
Лучше не буду позориться и оформлю ее как метод.

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

Я просто думал что на яве нельзя создавать свои новые методы уже существующих классов.

не распарсил

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

>Я просто думал что на яве нельзя создавать свои новые методы уже существующих классов.

Что непонятно? Нельзя наследовать класс и дописать к нему свой метод.

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

Реабилитация

// Исправляюсь
public Polygon star(int x,int y,int n, double r1,double r2)
   {
      
       /*
       * x ,y - координаты центра звезды
       * r1,r2 - внешний и внутренний радиус
       * n - количество вершин звезды
       */
      
      // вычисления координат вершин
      double a=Math.PI/n , r=r1 , rnext=r2 , temp ;
      Polygon p = new Polygon ();
      int i ;
      for (i=1;i<=(2*n);i++)
      {
         p.addPoint( x+(int)(r*Math.sin(a*i)), y-(int)(r*Math.cos(a*i)) ) ;
         temp=r;r=rnext;rnext=temp;
      }
      return p ;
    }
   
   // -------------------------------------
   public void paint(Graphics g)
   {
      Polygon p = new Polygon ();
      p = star (200,200,7,40.5,105.5);
      g.drawPolygon(p);
      // Все работает :)
   }
   

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

этож ява, надо больше ентерпрайзу:)))

ну как вариант, да

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

Весь код

package pkg;
import java.awt.Graphics;
import java.awt.Polygon;

import javax.swing.JFrame;

public class MyClass extends JFrame
{
   private static final long serialVersionUID = 1L;
   
   public Polygon star(int x,int y,int n, double r1,double r2)
   {
      
       /*
       * x ,y - координаты центра звезды
       * r1,r2 - внешний и внутренний радиус
       * n - количество вершин звезды
       */
      
      // вычисления координат вершин
      double a=Math.PI/n , r=r1 , rnext=r2 , temp ;
      Polygon p = new Polygon ();
      int i ;
      for (i=1;i<=(2*n);i++)
      {
         p.addPoint( x+(int)(r*Math.sin(a*i)), y-(int)(r*Math.cos(a*i)) ) ;
         temp=r;r=rnext;rnext=temp;
      }
      return p ;
    }
   
   // -------------------------------------
   public void paint(Graphics g)
   {
      Polygon p = new Polygon ();
      p = star (200,200,7,40.5,105.5);
      g.drawPolygon(p);
      
   }
   
   
   public static void main(String[] args)
   {
      MyClass gd = new MyClass();
      // Определяем заголовок окна
      gd.setTitle(«Звезда :)»);
      // Определяем размер окна
      gd.setSize(400, 400);
      // Запрещаем пользователю изменять размеры окна
      gd.setResizable(false);
      // Определяем, что при закрытии окна заканчивается работа
      // программы
      gd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      // Делаем окно видимым
      gd.setVisible(true);


   }

}

unixway
() автор топика
Ответ на: Весь код от unixway

Чтото я не вижу где ты свои методы дёргаешь? может ослеп..:)

private static final long

Жесть какая.. после этого ещё спп ругают:))

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

да ну нормально там всё; не фонтан, конечно, но в качестве учебного пособия всяко лучше подхода «по объекту на каждую звёздочку»

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

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

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

умру, наверное, от стыда теперь

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

>>Жесть какая.. после этого ещё спп ругают:))

Фигня, очень быстро привыкаешь) Хотя на тему уместности и неуместности использования final целые холивары в жабе бывают.

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

>Ну мне тоже не особенно понятно, хотя вроде как на жабе и пишу.


В жабе нет наследования? О_О Или может быть такого понятия, как метод.

ShTH
()
Ответ на: комментарий от rual_ilmarranen

Кстати, стукните в джаббер (в профиле новый)

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

что значит новые методы уже существующих классов? Где ты увидел слово наследование там?

Я, вообще, это понимаю как:

«У меня есть класс А, могу ли я добавить туда свои новые методы»

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

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

«У меня есть класс А, могу ли я добавить туда свои новые методы»

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

А что тут странного? =) Вон, в Smalltalk можно любой класс по необходимости расширить нужным методом, пусть он даже из стандартной библиотеки.

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

>«У меня есть класс А, могу ли я добавить туда свои новые методы»


А я как «Унаследовать в классе Б класс А и добавить в класс Б свой метод». Зачем копипастить, когда есть наследования? Разве что если не все нужные данные имеют спецификатор доступа protected(Если в жабе такое есть, поправьте коли ошибусь).

ShTH
()
Ответ на: Весь код от unixway

Конкретно здесь будет лучше сделать отдельный класс MyStar. Которому в конструктор будут передаваться все варьирующиеся значения, как и было написано выше. В самом классе завести необходимые поля, которые будут инициализироваться в конструкторе. И в этом же классе сделать метод paint. Тогда ему ничего не надо будет передавать, а просто пользоваться полями класса.

и в main вызывать

MyStar star1 = new MyStar(10, 20, 30, 40, 50..);
star1.paint();
..
MyStar starN = new MyStar(50, 40, 30, 20, 10..);
starN.paint();
rual_ilmarranen
()
Ответ на: комментарий от yoghurt

>Вон, в Smalltalk можно любой класс по необходимости расширить нужным методом, пусть он даже из стандартной библиотеки.

Так в том и дело. Вроде как везде можно дописывать свои методы. Что в классах, что не в классах(если ЯП поддерживает их отсутствие).

rual_ilmarranen
()
Ответ на: комментарий от unixway

а чем функция отличается от метода?

ну и да. В жабе отдельную функцию(без класса-родителя) сделать нельзя.

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

>Теперь я не распарсила тебя. при чем тут копипаста и protected?

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

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

экстендится там только JFrame, если судить по коду, и собственный метод star уже добавлен. Так что это опять-таки был бы достаточно странный вопрос.

rual_ilmarranen
()
Ответ на: комментарий от ShTH

Мне как-то казалось, что человек, который заводит новый жаббер, при желании добавляет туда свой прошлый контакт-лист. Если нет желания, то не добавляет. Разве не так?

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

У меня старый контакт-лист удалился из-за идиотских админов jabber.org, и контакты я потерял, увы :(

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

Что плохого в этом треде

то, что «добавить метод уже существующему классу» и «отнаследовать класс, расширив его методом» - это разные вещи. запретить второе, вообще говоря, нетривиально (разрешить наследование, но запретить расширение), и не факт что в принципе возможно в Java

а исходное сообщение звучит в духе Smalltalk или какого-нибудь CLOS (или Snit), но никак не Java

что вы так отреагировали?

отреагировал я так, потому как не воспринимаю тебя серьёзно в технических тредах. знал бы хоть до какого-то уровня хоть один ЯП - было бы о чём разговаривать

тупой высер обидчивого С-задрота.

во-первых, где я на кого обижался? во-вторых, почему именно C? почему не Haskell-задрот, не Tcl-задрот, не C++-задрот в конце концов? меня терзает любопытство

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

>в контексте разницы всё равно нет

В контексте разница есть. Человек подумал, что ты хочешь предложить ему сделать отдельную функции вне класса. Потому и удивился.

rual_ilmarranen
()
Ответ на: комментарий от jtootf

>Что плохого в этом треде
то, что «добавить метод уже существующему классу» и «отнаследовать класс, расширив его методом» - это разные вещи. запретить второе, вообще говоря, нетривиально (разрешить наследование, но запретить расширение), и не факт что в принципе возможно в Java


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

отреагировал я так, потому как не воспринимаю тебя серьёзно в технических тредах. знал бы хоть до какого-то уровня хоть один ЯП - было бы о чём разговаривать



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





во-первых, где я на кого обижался? во-вторых, почему именно C? почему не Haskell-задрот, не Tcl-задрот, не C++-задрот в конце концов? меня терзает любопытство


Ну не важно, но вам не понравилось ООП в си и вы на меня обиделись по-видимому. И потому, что считаете, что инкапсуляция не нужна. А чуть ниже тут я глупость ляпнул про стандарты, да. Бывает, что поделать.

ShTH
()
Ответ на: комментарий от rual_ilmarranen

В контексте разница есть

что ж, мы с разных сторон смотрим на контекст :)

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