Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/29: Рейтинг темы: голосов - 29, средняя оценка - 4.83
-7 / 22 / 4
Регистрация: 07.03.2013
Сообщений: 229

Базовые термины JAVA

20.03.2013, 01:05. Показов 5972. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать небольшую програмку на джаве смекалки хватает, но вот с теорией не все в порядке. Читаю сейчас книги по джаве вроде понимаю, НЕ УВЕРЕН ЧТО ПРАВИЛЬНО ПОНИМАЮ, нужна ваша помощь как опытных программистов.

Укажите пожалуйста на ошибки в определение терминов, если они есть. (их я описываю своими словами, так как понял):

Класс - основа любой программы которая содержит объекты решающие определенный ряд поставленных этому классу задач.

Тип - тоже что и класс, только звучит в более общей форме, то есть не имея акцента именно на классе, а просто как определения типа какого то обьекта.
Переменная - (х, у, а, с, cat, dog) вводимые так сказать собственные "символы/слова" которым присваивается какое то значение.

Метод/функция - метод это то же что и функция, в ООП функции называют методами. Метод это своеобразный обработчик наших переменных/обьектов. То есть набор действий/инструкций для переменных или обьектов, написанный нами (так же есть встроеный методы (например систем.аут.принтлн).

Обьект/экземпляр класса - обьект и экземпляр это одно и то же. то есть обьект обладает какими то свойствами, а эти свойства как бы экземпляры самого обьекта( человек - обьект. Уши, ноги , руки - экземпляры обьекта ПОТОМУ ЧТО ПРИНАДЛЕЖАТ ЧЕЛОВЕКУ), а обьект ЧЕЛОВЕК в свою очередь тоже является экземпляром но уже более высокого класса.

конструктор класса - что то непонятное, типа метода, но он выполняется сразу после своего объявления(если можно, поясните что это)

композиция - тоже смутно понимаю, это что то типа производного класса ? класс в середине главного класса?

агрегирование - динамическая композиция, то есть например: человек и голова - без головы нет человека, без человека нет головы (это композиция), голова - волосы - волосы могут бить, могут не бить от этого композиция не разрушится (это агрегирование)?????

делегирование - передача управления, тоже не особо ясно.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.03.2013, 01:05
Ответы с готовыми решениями:

Базовые понятия java ООП, инкапсуляция и т.д
Всем привет. Изучаю сейчас джава, простенький код написал, чтоб разобраться, как джава с переменными работает. В итоге мозг взрывается....

Термины функции
Привет! Не бейте тапками за неумные вопросы, но... Может кто-нибудь обьяснить что значит : "возвращает значение"?

Термины-антонимы
Всем привет. По украинскому задали сочинить текст (по специальности, т.е. всё на программистскую тему) используя термины-антонимы. Пока что...

9
 Аватар для mutagen
2587 / 2260 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
20.03.2013, 02:04
Класс - основа любой программы которая содержит объекты решающие определенный ряд поставленных этому классу задач.
Не обязательно задачи только этого класса, может быть класс полностью из статических женерик методов решающий задачи целого конгломерата классов
Тип - тоже что и класс, только звучит в более общей форме, то есть не имея акцента именно на классе, а просто как определения типа какого то обьекта.
тип - нет такого понятия, есть интерфейс
Переменная - (х, у, а, с, cat, dog) вводимые так сказать собственные "символы/слова" которым присваивается какое то значение.
верно
Метод/функция - метод это то же что и функция, в ООП функции называют методами. Метод это своеобразный обработчик наших переменных/обьектов. То есть набор действий/инструкций для переменных или обьектов, написанный нами (так же есть встроеный методы (например систем.аут.принтлн).
в отличие от функций метод не может быть глобальным, он обязан принадлежать классу
Обьект/экземпляр класса - обьект и экземпляр это одно и то же. то есть обьект обладает какими то свойствами, а эти свойства как бы экземпляры самого обьекта( человек - обьект. Уши, ноги , руки - экземпляры обьекта ПОТОМУ ЧТО ПРИНАДЛЕЖАТ ЧЕЛОВЕКУ), а обьект ЧЕЛОВЕК в свою очередь тоже является экземпляром но уже более высокого класса.
не совсем верно, обьект он же экземпляр это структура в памяти построенная на основе модели его класса и содержащая внутри себя значение своих переменных, существуют ещё примитивы и они не являются обьектами, хотя могут принадлежать классу
конструктор класса - что то непонятное, типа метода, но он выполняется сразу после своего объявления(если можно, поясните что это)
аналог метода для создания обьекта класса, если в нём есть параметры, он позволяет их использовать для установки внутреннего состояния класса в определённое значение на этапе создания, в отличии от метода ничего не возвращает кроме обьекта класса в комбинации с new
композиция - тоже смутно понимаю, это что то типа производного класса ? класс в середине главного класса?
комбинация одних классов внутри другого
агрегирование - динамическая композиция, то есть например: человек и голова - без головы нет человека, без человека нет головы (это композиция), голова - волосы - волосы могут бить, могут не бить от этого композиция не разрушится (это агрегирование)?????
в каком контексте звучал этот термин?
делегирование - передача управления, тоже не особо ясно.[/QUOTE]
например передача задачи прослушивания событий листенеру
1
-7 / 22 / 4
Регистрация: 07.03.2013
Сообщений: 229
20.03.2013, 02:56  [ТС]
Спасибо!

По поводу обьекта я правильно Вас понял?:
Обьект это совокупность переменных которые объединяясь выполняют ряд поставленых для данного класса, или класса который их будет вызывать, задач?
А каждый класс должен иметь по идее только один обьект, или возможно несколько?

по сути для класса ЧЕЛОВЕК, обьектом тоже будет ЧЕЛОВЕК, а его переменными - РУКИ, НОГИ, ГОЛОВА (так как эти элементы выполняют инструкции заданные методом,...?

агрегирование - ..
-в каком контексте звучал этот термин?
Просто как определение в книге философия джава: "..если композиция выполняется динамически то обычно она именуется агрегированием."

Добавлено через 18 минут
Я думал абстрактная схема будет выглядеть примерно так?:

class человек;
интерфейс:
-рука
........
........
class рука : человек;
интерфейс:
-брать
-сжимать
-отпускать
рука рук = новая рука()
рук.брать()

По идее между классом человек и классом рука происходит композиция?
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
20.03.2013, 04:35
Цитата Сообщение от Olllolll Посмотреть сообщение
А каждый класс должен иметь по идее только один обьект, или возможно несколько?
Класс - это описание группы объектов (или класса объектов), имеющих общие характеристики или поведение ... или и то, и другое.
На Вашем примере. Если класс - Человек, то объектами могут выступать конкретные люди "Ваня", "Коля", "Петр". Они будут иметь одинаковые поля (уши, ноги , руки), но они будут содержать различные данные для конкретного "экземпляра человека".

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

Цитата Сообщение от Olllolll Посмотреть сообщение
class рука : человек;
Это - наследование. Наследование можно понимать как следующее отношение между типами (на примере классов): "класс 1 является так же классом 2" или "класс 1 так же имеет характеристики и поведение класса 2". Возвращаясь к Вашему примеру, для класса Человек, базовым может послужить более глобальный класс "Живой организм" (т.е. "Человек является так же Живым организмом"). Или дочерним - Мужчина или Женщина (т.е. "Мужчина является так же Человеком").

Цитата Сообщение от Olllolll Посмотреть сообщение
class человек;
интерфейс:
-рука
А тут - правильно. Композиция описывает отношения (на примере классов) как "класс 1 содержит класс 2". Т.е. "Человек содержит Руку/-и"
1
-7 / 22 / 4
Регистрация: 07.03.2013
Сообщений: 229
20.03.2013, 20:05  [ТС]
но наследование по сути можно не использовать?
Как аналогичный вариант можно же создать к примеру отдельно класс АУДИ,
и отдельно класс АУДИ А8,
и еще создать третий класс который будет исполнять/управлять классами АУДИ и АУДИ А8
Разве в этом случае результат не будет такой же как если бы мы унаследовали от класса АУДИ класс АУДИ А8??

Просто мне немного сложно уловить саму суть наследования, как то так все это..(в базовом классе интерфейс тот что и в дочернем классе , но что те что те работают со своими данными, суть тогда?? просто что бы меньше места и меньше исходных файлов с росширением .class???)
СКАЖИТЕ ПОЖАЛУЙСТА СВОИМИ СЛОВАМИ, ДЛЯ ЧЕГО НАСЛЕДОВАНИЕ И КОМПОЗИЦИЯ . СПАСИБО.
книги читаю, но хочу вникнуть в суть на все 101% чисто философски)
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
20.03.2013, 21:12
наследование придумали по двум простым причинам: 1) что бы не писать одно и то же 100500 раз, 2) что бы не рвать зад при небольших изменениях

например вам нужно описать все живое в этом мире. хотя нет, остановимся на мышах. это подсемейство состоит из 519 видов. т.е. если не применять наследование у вас будет 519 классов в которых 80% информации будет совершенно одинаковая.

теперь вам нужно еще описать пару не смежных видов млекопитающих. можете выбрать все что угодно. количество классов выросло в 2-3 раза. количество совершенно одинаковой информации так и осталось на уровне 80%.

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

теперь вам нужно изменить какую-то информацию относящуюся именно к млекопитающим. например добавить поле "boolean рождаетсяСлепым" и установку его значения в конструкторе. в итоге вам нужно править каждый из написанных вами классов дописывая в каждый две совершенно одинаковые строчки кода. внимание: в 5500 классах написать совершенно одинаковые две строчки кода.

если бы у вас было наследование - вам нужно было бы добавить эти эти две строчки в один единственный класс. при этом применение наследования увеличило общее количество классов примерно на 10-20%, в зависимости от требуемого уровня детализации иерархии.

а теперь вопрос: зачем же нужно наследование?)

да. и это я не затрагивал тему управления всем этим ужасом
1
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
20.03.2013, 21:17
У меня к Вам многабукав, не сердчайте

Цитата Сообщение от Olllolll Посмотреть сообщение
но наследование по сути можно не использовать?
Вас ничто и никто не обязывает использовать ни наследование, ни композицию. Вы сами захотите как прочувствуете реальную пользу от этого

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

Используя объекты одного класса внутри другого, мы:
1. видим только в объекте только то, что нам предоставил открыты интерфейс,
2. не можем повлиять на структуру используемого класса.

Цитата Сообщение от Olllolll Посмотреть сообщение
в базовом классе интерфейс тот что и в дочернем классе , но что те что те работают со своими данными, суть тогда??
Правильно на половину Дополнением является то, что в дочернем классе интерфейс = интерфейс базового класса + интерфейс дочернего. Дочерние классы очень даже могут работать с полями и методами базового класса.

Цитата Сообщение от Olllolll Посмотреть сообщение
просто что бы меньше места
Тоже правда на половину Точнее да, экономия места тоже в списке положительных моментов присутствует. Давайте на примерах.

Задача №1:
Допустим, нам нужно описать ряд автомобилей с помощью классов (для дальнейшего использования где-либо). Для линейки Ауди: A5, A8, TT. Данные которые должны храниться: цвет, количество дверей. И что должны уметь наши машины: ехать и открывать двери.

Получим:
Java
1
2
3
4
5
6
7
8
9
class AudiA5{
//поля
color,
doorNumber
 
//методы
drive(),
openAllDors()
}
Java
1
2
3
4
5
6
7
8
9
class AudiA8{
//поля
color,
doorNumber
 
//методы
drive(),
openAllDors()
}
Java
1
2
3
4
5
6
7
8
9
class AudiTT{
//поля
color,
doorNumber
 
//методы
drive(),
openAllDors()
}
Благо, копи-пастинг много времени не занимает ... ну а если нам не 3 машины описывать, а 33? Будем продолжать? Не думаю.
Нам на помощь может прийти базовый класс. Туда мы вынесем всю информацию, которая дублируется в дочерних. Т.е.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Audi{
//поля
color,
doorNumber
 
//методы
drive(),
openAllDors()
}
 
class A5: Audi{}
 
class A8: Audi{}
 
class TT: Audi{}
Уже немного легче воспринимается, не находите? Теперь дальше ... возвращаясь к Вашему вопросу, "но что те что те работают со своими данными, суть тогда??". Мы можем в дочернем использовать поля и методы из базового класса. Допустимв нашей А5 стоят двери, которые отрываются вверх. Тогда реализацией openAllDors она будет отличаться от других классов.

Java
1
2
3
class A5: Audi{
openAllDors() {//особые инструкции по открытию дверей}
}
а все остальное остается неизменным.

Еще один плюсом наследования является удобство для внесения изменений. Представьте ситуацию ... когда Вы без наследования создали классы для 33х машин. А Вам говорят, "А давайте мы еще форму фар добавим". Нужно пролистать все 33 штуки и везде не забыть добавить. Альтернатива в наследовании - 1 строчка в 1 классе

Про композицию:
Допустим, нам надо добавить фары к нашим машинкам. И нужно следить за количеством лампочек в них и формой. Что они у нас будут уметь делать: вкл и выкл. Одним примитивным типом данных не описать (не, можно, конечно, строкой полное дословное описание ... но как-то не красиво). Нам понадобится класс для хранения этих данных:

class Lights{
//поля
bulbNumber,
shape

//методы
on(),
off()
}
Теперь нужно их связать. Можем ли мы сказать, что наши Фары являются так же Ауди? Нет. А то, что фары должны содержать данные, что хранятся в Ауди или в каком-либо из дочерних классов? Тоже нет. Ауди содержит/использует Фары. Добавим их в класс (я добавила типы данных для полей, чтобы было понятно что и куда дабавляется):
Java
1
2
3
4
5
6
7
8
9
10
class Audi{
//поля
String color,
int doorNumber,
Lights audiLights
 
//методы
drive(),
openAllDors()
}
теперь мы можем использовать наши фары в машине (например так):

Java
1
2
3
4
drive(){
audiLights.on();
//поехали
}
Но на сам класс Фары внутри Ауди мы не можем воздействовать.


Задача №2:
Допустим, у нас гонка и все наши 3 машины учавствуют в ней. Что по сути нам нужно сделать: нужно чтобы все 3 машины поехали.

Где-то в коде мы создаем объекты наших классов:

Java
1
2
3
A5 a5Car = new A5();
A8 a8Car = new A8();
TT ttCar = new TT();
И говорим им ехать:

Java
1
2
3
a5Car.drive();
a8Car.drive();
ttCar.drive();
Выглядит не так страшно. А если из-таки будет 33? Уже не так красиво. Тут у нас срабатывают 2 положительных штуки:
1. Наследование.
2. Полиморфизм ... если еще не разбирались, можете пока не заморачиваться.

Т.к. мы говорили (используя наследование), что "A5 так же является Ауди", как и остальные 2 класса. Мы можем чуть переписать нашу запись:

Java
1
2
3
Audi a5Car = new A5();
Audi a8Car = new A8();
Audi ttCar = new TT();
следующим шагом можно все это счастье впихнуть в массив. В нем будет 3 элемента типа Audi.

Java
1
2
3
4
Audi [] cars = new [3];
cars[0] = new A5();
cars[1] = new A8();
cars[2] = new TT();
и для того, чтобы запустить все машинки, мы можем прогнать этот массив в цикле, вызывая метод drive() базового класса. Следует заметить, что если мы переопределили этот метод в дочернем классе (как сделали это для открытия дверей), то вызовется метод из дочернего класса. Удобно, не так ли?

Java
1
2
3
for(int i = 0; i < cars.length; i++){
   cars[i].drive();
}
и теперь хоть 3 машины, хоть 33. У нас останется этот код. Даже если будут новые реализации Audi (дочерние классы), нам это не помеха. И если у нас все дочерние классы будут иметь свою уникальную реализацию drive(), нам тоже бояться нечего.


Надеюсь, у меня получилось что-то донести
1
-7 / 22 / 4
Регистрация: 07.03.2013
Сообщений: 229
20.03.2013, 22:32  [ТС]
Цитата Сообщение от AckiyBolt Посмотреть сообщение
а теперь вопрос: зачем же нужно наследование?)
Спасибо! очень доходчиво объяснили)

Добавлено через 5 минут
Цитата Сообщение от Antenka Посмотреть сообщение
Надеюсь, у меня получилось что-то донести
А Вам особое огромное спасибо!)
Это просто гениально, это гениально просто, информация воспринимается на лету, все по полочкам, сразу видно - с энтузиазмом человек взялся..!
Это Вы сами писали или с какой то литературы? если с литературы, то мне она срочно позарез нужна!))
0
 Аватар для Antenka
56 / 56 / 0
Регистрация: 15.03.2013
Сообщений: 88
21.03.2013, 00:12
Цитата Сообщение от Olllolll Посмотреть сообщение
Это Вы сами писали или с какой то литературы? если с литературы, то мне она срочно позарез нужна!))
Писала от руки .. но по прочтении много-чего интересного и некоторого количества практики (да и объясняю не первый раз)
Эккель - хороший товарищ, и книга хорошая. Но вот русский перевод на треть меньше оригинала. Знаю, что некоторых глав не хватает .. может и какие-то описания обрезали. Если есть возможность, я бы рекомендовала англо-версию глянуть.

А вообще, все поймется со временем. Нет одной универсальной книги, которая сразу всему научит. Читайте, пробуйте и со временем количество перерастет в качество

А если не понимается - спрашивайте, пальцев много, хватит на объяснение не малого количества материала
0
 Аватар для AckiyBolt
653 / 402 / 35
Регистрация: 19.02.2013
Сообщений: 1,072
Записей в блоге: 2
21.03.2013, 11:12
забыл сказать. в плане ооп могу посоветовать: Гради Буч. Объектно ориентированный анализ и проектирование
заодно познакомитесь с UML
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.03.2013, 11:12
Помогаю со студенческими работами здесь

Вывести термины иерархической таксономии
Здравствуйте. Подскажите, как вывести список терминов определенной иерархической таксономии, учитывая родительские термины? Поясню на...

Переведите, пожалуйста. географические термины
Широта и долгота.

Термины в кавычках в прописные буквы
Доброго времени суток, прошу помочь. Как подключить текстовый файл в котором специальные термины выделены кавычками. И как переписать...

Скиньте все термины по Pascal ABC
Завтра защита контрольной работы по программированию. Скиньте термины хочу повторить термины Добавлено через 21 минуту Заранее...

Парсинг: получить все термины с сайта
Добрый день Очень нужна Ваша помощь. Мне нужно получить с сайта http://www.ekonomiks.net.ua/ все термины. Я смог сделать, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru