классы в java

Ответить
Романыч
Сообщения: 7
Зарегистрирован: 28 авг 2014, 05:05

классы в java

Сообщение Романыч » 28 авг 2014, 13:54

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

Код: Выделить всё

package ****
import ****

class news(){                          <----  класс выполняет роль структуры
String head,text

}

public class MainActivity extended Activity(){
news[] novosti;
news novost;
OnCreate(){
блаблабла
novosti = new news[10];
novost = new news();

(цикл заполнения novosti)
for(int i=0; i<10; i++){
novosti[i] = new news();
novosti[i].head = "новость "+i;
novosti[i].text = "текст новости "+i;
}

(заполнения одного пункта novost)
novost = new news();
novost.head = "новость 100";
novost.text = "текст новости 100";

*********
типа читаем здесь новсти через логи (проверяем запись) //все норм
*********
}
}


все находится в одном классе, все работает, все работает.

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


вот тут и возникает вопрос

А куда деть переменные??
очевидно нужен как минимум\максимум отдельный клас для переменных.
ну для int string все понятно создал класс определил public final
в него завернул или fianl static или static эти пременые..
а что делать со структурами???

например разберем тотже код только

Код: Выделить всё

class news(){                          <----  класс выполняет роль структуры
String head,text

}
отдельный класс news который теперь имеет вид

Код: Выделить всё

public final class news(){                          <----  класс выполняет роль структуры
static String head="",text=""

}
перобразим активити

Код: Выделить всё

package ****
import ****

public class MainActivity extended Activity(){
news[] novosti;   }                   
news novost;     }           <--   ссылаются на отдельный класс
OnCreate(){
блаблабла
novosti = new news[10];
novost = new news();

(цикл заполнения novosti)
for(int i=0; i<10; i++){
novosti[i] = new news();
novosti[i].head = "новость "+i;
novosti[i].text = "текст новости "+i;
}

(заполнения одного пункта novost)
novost = new news();
novost.head = "новость 100";
novost.text = "текст новости 100";
}
}

и класс приемник который будет принимать из общего класса новости

Код: Выделить всё

package ****
import ****


public class priemnik extended Activity( или Fragment)(){
news[] novosti;
news novost;
OnCreate(){
блаблабла

(цикл чтения novosti)
for(int i=0; i<10; i++){
Log.d(novosti[i].head,novosti[i].text);   <---валится в NULLPOINTEREXEPTION на первом же индексе
}

(чтения novost)
Log.d(novost.head,novost.text);   <--- запись появляется в консоль

}
}
так вот к чему я введу

как записать в общий класс news массив структур так, чтобы потом из другого класса его прочитать (желательно фрагмент али активити)???

мои раздумия таковы что одиночную структуру он записывает\читает потому что знает что по этому адресу только одно значение

а массив не может прочитать может потому что он не знает ни размерность ни степень этой структуры??
если я не прав обьясните мне...
заранее спасибо))

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: классы в java

Сообщение altwin » 28 авг 2014, 14:11

Изучайте основы java и ООП, никто не будет пересказывать вам основы теории.
<---валится в NULLPOINTEREXEPTION на первом же индексе
потому, что это полная чушь. Вы можете сказать, что вы там ожидаете увидеть?
а теперь представим момент когда размер активити переваливает за 5000 строчек кода
единственное решение - уволить автора без выходного пособия... изучайте: https://github.com/android?page=1&query=apps
Последний раз редактировалось altwin 28 авг 2014, 14:20, всего редактировалось 1 раз.
Изображение

Романыч
Сообщения: 7
Зарегистрирован: 28 авг 2014, 05:05

Re: классы в java

Сообщение Романыч » 28 авг 2014, 14:20

altwin писал(а):Изучайте основы java и ООП, никто не будет пересказывать вам основы теории.
<---валится в NULLPOINTEREXEPTION на первом же индексе
потому, что это полная чушь. Вы можете сказать, что вы там ожидаете увидеть?


очень малая вероятность того что хотябы

"новость 1","текст новости 1"

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: классы в java

Сообщение altwin » 28 авг 2014, 14:20

Романыч писал(а):
altwin писал(а):Изучайте основы java и ООП, никто не будет пересказывать вам основы теории.
<---валится в NULLPOINTEREXEPTION на первом же индексе
потому, что это полная чушь. Вы можете сказать, что вы там ожидаете увидеть?


очень малая вероятность того что хотябы

"новость 1","текст новости 1"
В массиве? Вам нужно изучать java, основы ООП и структуры данных. Во первых java - это только объекты. Вы всегда импортируете класс, создаете объект и обращаетесь к его методам, в вашем случае это могут быть так называемые getter -ы. Но это не верное архитектурное решение. В любом случае постарайтесь как можно более детально.. даже наизусть выучить всю теорию, это очень сильно вам поможет избежать проблем. Иначе вы быстро все бросите.

P.S. даже если упустить тот факт, что ваш класс не содержит конструктора и понять как туда попадают { "новость 1","текст новости 1" } не возможно, для хранения пар ключ/значения используются hash подобные структуры.
Последний раз редактировалось altwin 28 авг 2014, 14:24, всего редактировалось 1 раз.
Изображение

Романыч
Сообщения: 7
Зарегистрирован: 28 авг 2014, 05:05

Re: классы в java

Сообщение Романыч » 28 авг 2014, 14:23

altwin писал(а):
Романыч писал(а):
altwin писал(а):Изучайте основы java и ООП, никто не будет пересказывать вам основы теории.
<---валится в NULLPOINTEREXEPTION на первом же индексе
потому, что это полная чушь. Вы можете сказать, что вы там ожидаете увидеть?


очень малая вероятность того что хотябы

"новость 1","текст новости 1"
В массиве?

канешно это глупо звучит

но да



но просто как этот массив сделать общим для разных классов

передавть через параметры? интентами?
лишние строчки кода да и весяма не удобно

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: классы в java

Сообщение Mikhail_dev » 28 авг 2014, 14:26

единственное решение - уволить автора без выходного пособия... изучайте: https://github.com/android?page=1&query=apps
Помнится в коде Джона Кармака есть коды и гораздо превышающие 5 тысяч строк. Я про то, что совершенно не факт, что это всегда плохо.

Романыч, почитайте книгу "Совершенный код", там хорошо раскрываются все эти понятия, а также как лучше именовать переменные и прочее.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: классы в java

Сообщение altwin » 28 авг 2014, 14:26

Романыч писал(а):
altwin писал(а):
Романыч писал(а):
altwin писал(а):Изучайте основы java и ООП, никто не будет пересказывать вам основы теории.
<---валится в NULLPOINTEREXEPTION на первом же индексе
потому, что это полная чушь. Вы можете сказать, что вы там ожидаете увидеть?


очень малая вероятность того что хотябы

"новость 1","текст новости 1"
В массиве?

канешно это глупо звучит

но да



но просто как этот массив сделать общим для разных классов

передавть через параметры? интентами?
лишние строчки кода да и весяма не удобно
http://java-study.ru/java-uchebnik/88-java-massivy каким образом вы собираетесь хранить ключ и значение в массиве?
Зачем вам кого -то делать общими? это полный бред и очень дурной тон в программировании... У вас есть класс, вы создаете его объект и используете. Вам нужно привыкать делать классы с минимальным функционалом. Одна задача - один класс. Никаких общих переменных быть не должно. Передавать конкретно в Android - да intent и другие стандартные пути. Не брезгуйте теорией, вы удивитесь как много вопросов отпадет, когда начнете перечитывать третий раз.

>> лишние строчки кода да и весяма не удобно
Вы правы на 100%, глобальные переменные и любые данные - это круто, особенно когда ваш глобальный массив используется в сотне потоков, а оператор GOTO подарит нам всем сотни свободных часов в год. Вам там хорошую книжку порекомендовали, попробуйте почитать. ;)
Последний раз редактировалось altwin 28 авг 2014, 14:35, всего редактировалось 2 раза.
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: классы в java

Сообщение altwin » 28 авг 2014, 14:27

Mikhail_dev писал(а):
единственное решение - уволить автора без выходного пособия... изучайте: https://github.com/android?page=1&query=apps
Помнится в коде Джона Кармака есть коды и гораздо превышающие 5 тысяч строк. Я про то, что совершенно не факт, что это всегда плохо.

Романыч, почитайте книгу "Совершенный код", там хорошо раскрываются все эти понятия, а также как лучше именовать переменные и прочее.
При чем тут? у меня есть код в котором уже более 100 млн строк... нопокажи мне Activity в которой 5 000 строк.
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: классы в java

Сообщение Mikhail_dev » 28 авг 2014, 14:40

а, вот ты про что =) Ну тут пожалуй соглашусь, сам пока что более 1500 строк не превышал в активности, да и то требуется рефакторинг.
А что за класс на 100 млн. строк?

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: классы в java

Сообщение altwin » 28 авг 2014, 14:49

Mikhail_dev писал(а):а, вот ты про что =) Ну тут пожалуй соглашусь, сам пока что более 1500 строк не превышал в активности, да и то требуется рефакторинг.
А что за класс на 100 млн. строк?
Это не совсем класс, просто парсер логов записывающий данные в exel. Это скриптовый язык и простое приложение учета (просто парсить нужно как вывод 1c, так и программ расчета, причем разных...) лет 7 назад его делали для "окна - двери" контор. Вся суть в том, что структура логов меняется, но ради целостности ничего не удаляется, плюс разный вормат вывода. Вот и приходилось плодить всякие условия. Переписывать было лень, а теперь поздно, да и просто поддержка, никто его больше не покупает... это же perl... там сейчас разбито по файлам, но суть не меняется оно всеравно перед запуском в одну кучу все собирает и сплошной строкой и зачитывает... бред полный но что то исправлять даже страшно :) Самое смешное, что доступ админам клиента к нему открыт и они переодически дописывали... все использовали один файл... т.е. дописал, что тебе нужно и коментарий поставил - это мое ... В итоге потом очень весело пытаться нужную строчку кода найти... ide то так и нет толковой :)
Изображение

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

Re: классы в java

Сообщение Mikhail_dev » 28 авг 2014, 15:22

Тот случай, когда рефакторить уже поздно =)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: классы в java

Сообщение klblk » 29 авг 2014, 08:17

Романыч писал(а):...Значится вопрос такой...
0) имхо но так "(цикл чтения novosti)" лучше не писать, лучше что-нить более привычное: "//цикл чтения novosti", или "/*цикл чтения novosti*/". А так читаешь код и непонятно какого в нем делают какие-то непонятные скобки.
1) Количество строк кода конечно показатель качества кода, но он далеко не единственный, отсутствие архитектурных косяков куда более важно. Передачу данных между Activity принято через Intent осуществлять. Чтобы передавать свой класс через Bundle нужно реализовать в нем интерфейс Parcelable или Serializable. Activity и Fragment могут получить друг к другу доступ. Иногда для общих данных используется синглтон класса Application, но тут нужно точно понимать, что это тебе нужно и по другому лучше не сделаешь. Передавать данные в свой класс можно через конструктор или методы.
2) Тут скорее всего не нужен static:

Код: Выделить всё

public final class news(){                          <----  класс выполняет роль структуры 
static String head="",text="" 
 
} 
И обращаться к переменным принято в jave через гетеры и сетеры.

Ответить