Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Интефейсы 
:(
    Опции темы
LSD
Дата 9.12.2005, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



В зависимости от того какой параметр нам передали, мы выполняем разный код. Но сам код main не меняется.
Код
public class MyEventProducer
{
  public static void main(String[] args)
  {
    getDefaultAction(args[0]).doAction("Hello Word!");
  }
  
  private static Action getDefaultAction(String type)
  {
    if("GUI".equals(type))
      return new GuiHelloWordAction();
    else
      return new ConsoleHelloWordAction();
  }
}

interface Action
{
  public void doAction(String command);
}

class ConsoleHelloWordAction implements Action
{
  public void doAction(String command)
  {
    System.out.println(command);
  }
}

class GuiHelloWordAction implements Action
{
  public void doAction(String command)
  {
    JOptionPane.showMessageDialog(null, command);
  }
}



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Wowa
Дата 9.12.2005, 00:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Я добавил в ФАК статью про интерфейсы: http://vingrad.ru/JAVA-ART-002984
PM WWW   Вверх
COVD
Дата 9.12.2005, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



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


Примеров может быть много.

Программисты А и Б делают проект School. Программист А пишет класс Course, программист Б пишет класс Student. Программист А , не дожидаясь, пока будет готов класс Student, пишет метод setStudent(IStudent student) и создает интерфейс IStudent с нужным ему методом getName(). Программист А передает этот интерфейс программисту Б и говорит, что его класс Student должен имплементировать этот интерфейс, т.е. класс может быть каким угодно и называться как угодно, лишь бы он имел метод getName().

PM MAIL   Вверх
Wowa
Дата 11.1.2006, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

Репутация: 1
Всего: 290



Цитата(COVD @ 9.12.2005, 16:15 Найти цитируемый пост)

Программист А передает этот интерфейс программисту Б и говорит, что его класс Student должен имплементировать этот интерфейс, т.е. класс может быть каким угодно и называться как угодно, лишь бы он имел метод getName().

Но ведь Программист А может попросить программиста Б реализовать в своем классе метод string public getName(). Зачем делать через инферфейс? ИМХО, этот пример плохо подходит...
PM WWW   Вверх
COVD
Дата 11.1.2006, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Но ведь Программист А может попросить программиста Б

а если не может? если они вообще в разных странах работают и друг друга не знают smile . А интерфейс - это документ.

Пример может и плохой/ Хорошие примеры у преподавателей, у тех, чья профессия обьяснять smile.

Это иллюзия, что прочитав книжку можно все понять. Поймешь, когда будешь решать проблему для решения которой интерфейсы и придуманы. С другой стороны, можно много лет программировать и чего-то не знать. Тоже не беда.

Это сообщение отредактировал(а) COVD - 12.1.2006, 00:04
PM MAIL   Вверх
GIK
Дата 12.1.2006, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрый человек
**


Профиль
Группа: Участник
Сообщений: 985
Регистрация: 3.6.2005
Где: я только не небыв ал

Репутация: нет
Всего: 14



Цитата

Поймешь, когда будешь решать проблему для решения которой интерфейсы и придуманы.


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

Посудите сами
Пример:
Код

 interface Int1 {  
  int g1();  
  void g2();
}
 class Fix1 implements Int1{
  int tos;  
   //методы определенные в интерфейсе, без них нельзя т.к. класс не абстрактный.
 int g1(){  
 tos++;
 return(tos);
 }
   void g2(){
System.out.println(tos);
    }
   }
 class DemoInt1 {
 pablic static void main(String args[]){
  Int1 int1; //сылочная переменная на интерфейс
  Fix1 fix1 = new Fix1(); // просто экземпляр класса который реализует интерфейс
  int1 = fix1; //загрузка происходит во время выполнения а не во время компиляции
 }
}


А так можно просто обращатся к методам которые определены в том или ином объекте.
Код

class Fix1 {
 int tos=0;  
  int g1(){  
 tos++;
 return(tos);
 }
   void g2(){
System.out.println(tos);
 }
}
 class DemoInt1 {
 pablic static void main(String args[]){
  Fix1 fix1 = new Fix1(); 
    System.out.println(fix1.g1());
    fix1.g2();}
}



--------------------
Математика=>пиво=> програмирование, три вещи последовательны и совместимы !!!
Программирование - это не деятельнось! Программирование - это состояние души!
Бог - самый крутой программист.
PM MAIL ICQ   Вверх
batigoal
Дата 12.1.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 24
Всего: 151



GIK
Советую: делай отступы в коде побольше, не один пробел, а два-четыре. Читать будет легче.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
LSD
Дата 12.1.2006, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(GIK @ 12.1.2006, 13:57 Найти цитируемый пост)
Главное что я понял в интерфейсах, это то что с помощъю них можно реализовать
полиморфизм времени выполнения

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

Интерфейс нужен для абстрагирования реализации от задачи. Возьмем пример обработки события на кнопке. Есть задача оповестить всех заинтересованные классы о том, что произошло событие, для этого в интерфейсе ActionListener предусмотрен метод actionPerformed(ActionEvent). И оговорено что любой кто желает получать оповещения, о том что любой кто желает получать оповещения о том что кнопка была нажата, должен реализовать этот интерфейс, опрделив в методе actionPerformed(ActionEvent) свою логику, и зарегистрировать свой объект в качстве слушателя. У кнопки храниться список ActionListener-ов и когда происходит нажатие на кнопу, у каждого вызывается метод actionPerformed(ActionEvent). Таким образом в классе кнопки не надо думать о том: какие классы могут подписываться на данное событие, какие методы у этих классов есть, что эти методы делаю и т.д. Достаточно определть интефейс и сказать что слушателям надо его реализовать, и все.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
COVD
Дата 12.1.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 26.7.2005

Репутация: 17
Всего: 43



Цитата

Главное что я понял в интерфейсах, это то что с помощъю них можно реализовать
полиморфизм времени выполнения


Офигеть smile Не заморачивайтесь так сильно. Без интерфейсов вполне можно обойтись первое время. И без классов тоже, если писать весь код в main. Программа даже быстрее будет работать. Только ее труднее будет писать, тестировать и вносить изменения. Все эти обьектно-ориентированные понятия введены, чтобы упростить жизнь программистам (а на самом деле тем, кто платит им зарплату smile).


PM MAIL   Вверх
AntonioBanderaz
Дата 12.1.2006, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Velichko Anton
**


Профиль
Группа: Участник
Сообщений: 851
Регистрация: 28.4.2005
Где: Санкт-Петербург

Репутация: нет
Всего: 18



Цитата(COVD @ 12.1.2006, 16:04 Найти цитируемый пост)

Офигеть  Не заморачивайтесь так сильно. Без интерфейсов вполне можно обойтись первое время. И без классов тоже, если писать весь код в main. Программа даже быстрее будет работать. Только ее труднее будет писать, тестировать и вносить изменения. Все эти обьектно-ориентированные понятия введены, чтобы упростить жизнь программистам (а на самом деле тем, кто платит им зарплату ).

Пиши тогда на Assembler'е smile


--------------------
ГЫ... 
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1283 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.