Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / ООП / 19 сообщений из 19, страница 1 из 1
25.07.2007, 11:26:34
    #34682358
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
Такой вопрос больше из области теории. Пишу свой класс, который в конструкторе может выбрасывать исключения. Я так понимаю это не хорошо. Можно сделать простейший конструктор и затем вызывать метод init для объекта в котором производить инициализацию, но это тоже не лучший подход, т.к. после отработки конструктора объект не инициализирован со всеми вытекающими из этого последствиями. Так как быть в данном случае? Поделитесь опытом, пожалуйста.
...
Рейтинг: 0 / 0
25.07.2007, 11:45:13
    #34682446
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
пример нехорошего, как вы сказали, конструктора:
Код: plaintext
 public  FileInputStream(String name)  throws  FileNotFoundException
...
Рейтинг: 0 / 0
25.07.2007, 11:45:18
    #34682447
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
bemtaillТакой вопрос больше из области теории. Пишу свой класс, который в конструкторе может выбрасывать исключения. Я так понимаю это не хорошо. Можно сделать простейший конструктор и затем вызывать метод init для объекта в котором производить инициализацию, но это тоже не лучший подход, т.к. после отработки конструктора объект не инициализирован со всеми вытекающими из этого последствиями. Так как быть в данном случае? Поделитесь опытом, пожалуйста.
Кто вам сказал?
Если инициализация класса жизненно важна и без него дальнейший запуск не имеет смысла (например, отсутствуют ресурсы, отсутствует доступ к СУБД и т.д.) — вполне можно thrown'ить Exception и вываливаться с предсмертными воплями.

Если вы извне перехватываете исключения, то должны ожидать, что инстанс может быть не инициализировать.
...
Рейтинг: 0 / 0
25.07.2007, 11:45:29
    #34682449
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
*не инициализирован
...
Рейтинг: 0 / 0
25.07.2007, 11:46:29
    #34682452
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)
...
Рейтинг: 0 / 0
25.07.2007, 11:50:24
    #34682472
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.
...
Рейтинг: 0 / 0
25.07.2007, 11:53:30
    #34682482
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
мне пофигу. я против. имхо оочень неудобно.

я за ленивую инициализацию. при отладке гораздо лучше найти и просмотреть объедкт кот при своей инициализации шо-то кинул. и например рискнуть повторить её.

checked тож в топку
...
Рейтинг: 0 / 0
25.07.2007, 12:12:09
    #34682567
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
bemtaill
Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.
Это не C++
...
Рейтинг: 0 / 0
25.07.2007, 17:53:33
    #34683879
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.

Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах
...
Рейтинг: 0 / 0
25.07.2007, 18:02:56
    #34683914
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
funikovyuri bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.

Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах

В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект.
...
Рейтинг: 0 / 0
25.07.2007, 18:12:29
    #34683947
Хрюхрюшкин.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
bemtaill
В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект.
В Java вы можете быть спокойным. То, что не проинициализировалось, будет зачищено GC.
...
Рейтинг: 0 / 0
25.07.2007, 18:13:59
    #34683962
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
bemtaill funikovyuri bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :)

Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое.

Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах

В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект.


Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html
...
Рейтинг: 0 / 0
25.07.2007, 18:20:40
    #34683981
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
funikovyuri
Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html

Примеры будут если поможете с:
http://www.sql.ru/forum/actualthread.aspx?tid=455468

:) Нет времени сейчас отвлекаться...
...
Рейтинг: 0 / 0
26.07.2007, 14:20:54
    #34685939
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
bemtaill funikovyuri
Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html

Примеры будут если поможете с:
http://www.sql.ru/forum/actualthread.aspx?tid=455468

:) Нет времени сейчас отвлекаться...
Я имел ввиду, что если конструктор в C++ выбрасывает исключения, то в случае если программер не ловит его при создании объекта получаем наполовину сформированный объект и пытаемся работать с ним как с обычным. Возможно я не много неправильно выразился в начале : "это не хорошо" = "источник лишних возможных проблем". Хотя конечно в Java это не грозит, т.к. всегда исключение поймаем.
...
Рейтинг: 0 / 0
26.07.2007, 14:52:24
    #34686141
biomen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
Интерсно, а будет утечка при вызове конструктора и вызовется ли деструктор?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 class  Foo
{
  char [] * t;
    public  Foo()
   {
     t= new   char [ 10 ];
      throw   1 ;
   }
    public  ~Foo()
   {
     delete t;
   }
}
...
Рейтинг: 0 / 0
26.07.2007, 14:59:35
    #34686173
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
biomenИнтерсно, а будет утечка при вызове конструктора и вызовется ли деструктор?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 class  Foo
{
  char [] * t;
    public  Foo()
   {
     t= new   char [ 10 ];
      throw   1 ;
   }
    public  ~Foo()
   {
     delete t;
   }
}


Проверте.
PS: http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page73.html
...
Рейтинг: 0 / 0
26.07.2007, 15:13:14
    #34686239
biomen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
Спасиб, но просто нет компилятора. Видимо вызовется:)
...
Рейтинг: 0 / 0
26.07.2007, 17:13:09
    #34686816
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
bemtaill bemtaill funikovyuri
Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html

Примеры будут если поможете с:
http://www.sql.ru/forum/actualthread.aspx?tid=455468

:) Нет времени сейчас отвлекаться...
Я имел ввиду, что если конструктор в C++ выбрасывает исключения, то в случае если программер не ловит его при создании объекта получаем наполовину сформированный объект и пытаемся работать с ним как с обычным. Возможно я не много неправильно выразился в начале : "это не хорошо" = "источник лишних возможных проблем". Хотя конечно в Java это не грозит, т.к. всегда исключение поймаем.

Не понял, если честно. Еще раз повторяю - отстутствие возможности сообщать об ошибках конструктора - одна из причин по которым исключения вообще появились в С++. Все остальное детали реализации конкретных компиляторов и их соответствие стандарту. Сейчас в большинстве современных компиляторов С++ все нюансы (например с освобождением памяти и вызовом деструктора) уже учтены
...
Рейтинг: 0 / 0
26.07.2007, 18:04:52
    #34687040
bemtaill
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ООП
Тогда видимо был не прав. Признаю. Спасибо за разъяснения.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / ООП / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]