Форум программистов CodeGuru
18 Январь 2018, 10:13:05 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: ООП  (Прочитано 19109 раз)
0 Пользователей и 1 Гость смотрят эту тему.
kirill0072
Пользователь
***
Офлайн Офлайн

Сообщений: 44


Просмотр профиля
« : 09 Август 2008, 00:08:38 »

Плз объясните ООП на JS что такое функции конструкторы, классы и тд...
3 книги перебрал понять не могу, PS    С++ я не знаю
Записан
Adamant
Интересующийся
**
Офлайн Офлайн

Сообщений: 11


Просмотр профиля
« Ответ #1 : 09 Август 2008, 18:47:49 »

В JavaScript не существует понятие класса. Все делается через прототипы.
См. прототипное программирование.
Записан
WideWeb
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #2 : 10 Август 2008, 16:34:35 »

В JavaScript не существует понятие класса. Все делается через прототипы.
См. прототипное программирование.

У автора этого сайта есть особое мнение на счет классов в javascript. На мой взгляд достаточно интересное.
Записан
kirill0072
Пользователь
***
Офлайн Офлайн

Сообщений: 44


Просмотр профиля
« Ответ #3 : 10 Август 2008, 22:23:48 »

Я ваще та начинающий в этом деле.... хотелось бы услышать что такое ОПП или прототипное програмирование на JS и с чем его едят???
Записан
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #4 : 10 Август 2008, 22:49:42 »

Я ваще та начинающий в этом деле.... хотелось бы услышать что такое ОПП или прототипное програмирование на JS и с чем его едят???

В смысле - что такое ООП вообще ?
Или ООП в JavaScript конкретно ?
Просто про ООП вот так, в двух словах не объяснишь.

"прототипное програмирование" это... просто понятие. Это то же самое, объектно-ориентированное программирование Улыбка Просто наследование осуществляется через прототипы. Ну и соответственно (JavaScript все-же интерпретируемый, скриптовой язык), могут быть реализованы разные прикольные фишки, типа динамического наследования (объект-прототип некоторого объекта может быть изменен во время исполнения).

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

З.Ы. вообще, ООП - это просто термин, описывающий в большей мере парадигму, нежели какие то конкретные приемы, или подходы. Объектно-ориентированный подход реализован очень по-разному в разных языках программирования.
З.З.Ы. Вобщем, задавайте вопросы - ответим Улыбка но пока не понятно даже насчет чего отвечать Грустный
« Последнее редактирование: 10 Август 2008, 22:52:12 от 3V » Записан

c-coder
Пользователь
***
Офлайн Офлайн

Сообщений: 110


Просмотр профиля
« Ответ #5 : 14 Август 2008, 00:44:11 »

С++ я не знаю

Мое мнение такое. Надо разобраться с объектно-ориентированным программированием на примере такого мощного языка как C++, а потом уже исследовать все экзотические случаи например javascript Улыбка
Записан
kirill0072
Пользователь
***
Офлайн Офлайн

Сообщений: 44


Просмотр профиля
« Ответ #6 : 14 Август 2008, 20:30:03 »

неужели мне нужно учить отдельный язык чтоб понять ОПП

Блин если кто может в нескольких словах объяснить азы ОПП на JavaScript, буду очень и очень признателен, я не прошу подробное руководство, мне нужны начальные знания, после которых я бы мог читать заумную литературу


Я хочу узнать:
 - что такое объект, как он создается и тд
 - чё нить о прототипах
 - this что за оно (что за оно я знаю так что хотелось бы здесь получить что нить подробное)
 - ну и наследование
Записан
holdmann
Пользователь
***
Офлайн Офлайн

Сообщений: 262



Просмотр профиля
« Ответ #7 : 14 Август 2008, 22:54:42 »

1. Объект JavaScript — это неупорядоченный набор свойств, каждое из которых имеет нуль или более атрибутов, которые определяют, как это свойство может использоваться;
2. http://ru.wikipedia.org/wiki/Прототипное_программирование/ ;
3. this - обащение к текущему экземпляру объекта;
4. А вот наследование, посложнее объяснить +)
Возьмем допустим объект window, он содержит в себе другие объекты,
например: event, frames, history,document, navigator, screen, location.
далее допустим возьмем объект document, он содержит в себе следущие объекты:
links, images, anchors, forms. Ну и так далее ..
суть в том что, например, объект images наследует св-ва и методы объекта document, ну и так по иерархии вверх ...

Я сам изучал javascript по кускам чужого кода, поэтому конечно не могу воспроизвести полный теоретический курс. Так что если есть какие то косяки в моем представлении прототипного програмиирования на JS, то прошу исправить Улыбка
Записан

Елси вы хотите купить, продать, отремонтировать автомобиль в Ижевске: Вам сюда =)
(c)holdmann
3V
Администратор
Ветеран
*****
Офлайн Офлайн

Сообщений: 1347



Просмотр профиля WWW
« Ответ #8 : 15 Август 2008, 19:28:51 »

4. А вот наследование, посложнее объяснить +)
Возьмем допустим объект window, он содержит в себе другие объекты,
например: event, frames, history,document, navigator, screen, location.
далее допустим возьмем объект document, он содержит в себе следущие объекты:
links, images, anchors, forms. Ну и так далее ..
суть в том что, например, объект images наследует св-ва и методы объекта document, ну и так по иерархии вверх ...

Я сам изучал javascript по кускам чужого кода, поэтому конечно не могу воспроизвести полный теоретический курс. Так что если есть какие то косяки в моем представлении прототипного програмиирования на JS, то прошу исправить Улыбка

В той же википедии есть статьи насчет наследования в JavaScript.
Имхо, то что изложено - не совсем наследование.

далее допустим возьмем объект document, он содержит в себе следущие объекты:
links, images, anchors, forms. Ну и так далее ..
суть в том что, например, объект images наследует св-ва и методы объекта document, ну и так по иерархии вверх ...

images как раз не наследует свойства document. Объект document просто содержит коллекцию images как свойство.

Насчет наследования...

Как уже сказал holdmann,
Цитировать
Объект JavaScript — это неупорядоченный набор свойств

Суть. Можно создавать объекты в JavaScript (собственно, в JavaScript практически все - объекты) в литеральной нотации:
Код:
var object =
{
prop_0 : 0,
prop_1 : "строка",
prop_2 : function()
{
alert("prop_2 - метод");
}
};


в нотации создания объектов, конструктором Object (с последующей инициализацией свойств):

Код:
var object = new Object();

object.prop_0 = 0;
object.prop_1 = "строка",
object.prop_2 = function()
{
alert("prop_2 - метод");
};


Либо можно написать свою функцию-конструктор объектов, фактически создав тип или класс объектов.
Вообще то, конечно, в JavaScript нет такого понятия как "класс", однако, многие его используют (с некоторыми ограничениями).
Вобщем, свои мысли по этому поводу я в какой то мере изложил тут: Класс vs объект.

Вот пример функции-конструктора в JavaScript:
Код:
function CMyClass()
{
// инициализация свойств

this.prop_0 = 0;
this.prop_1 = "строка";
this.prop_2 = function()
{
alert("prop_2 - метод");
};
};


Заметьте, свойства создаются в конструкторе CMyClass. Это, в частности, означает, что:
1. для каждого объекта создается свой экземпляр свойства prop_2, а значит и каждый раз создается анонимная функция.
2. можно создавать объекты с различными наборами свойств (просто бери и по условию создавай в конструкторе разные свойства).
Т.е. строго говоря, конструктор не всегда определяет класс.


Далее... непосредственно наследование...

У объектов в JavaScript есть свойство prototype. Через это свойство объекту может задаваться объект-прототип.
Смысл в том, что при обращении к свойству объекта или его методу (а методы объекта, это, фактически свойства-ссылки на функии), это свойство ищется у объекта, если не находится - ищется по цепочке прототипов.

Блин... запарился писать... Вобщем, приведу классический пример наследования в JavaScript (возможно это прояснит ситуацию):

Код:
// функция-конструктор CMyClass_0

function CMyClass_0()
{
// инициализация свойств

this.prop_0 = 0;
this.prop_1 = "строка";
};


// функция-конструктор CMyClass_1
// класс CMyClass_1 будет наследником класса CMyClass_0

function CMyClass_1()
{
// сначала вызываем "коструктор базового класса"
// проще говоря - "родительский конструктор"
//
// это нужно для того, чтобы были проинициализированы
// (читай - созданы) свойства "базового класса"

this.__base_conctructor = CMyClass_0;
this.__base_conctructor();


// инициализация свойств (уже конкретно этого "класса")

this.prop_2 = 10;
};


// "вторая часть" осуществления наследования - установка
// прототипа
CMyClass_1.prototype = CMyClass_0;



// теперь можно создать объект "класса" CMyClass_1

var o = new CMyClass_1();

// и вывести значения свойств (как собственных, так и унаследованных)

alert( "prop_0 = " + o.prop_0.toString() + "\r\n" +
"prop_1 = " + o.prop_1.toString() + "\r\n" +
"prop_2 = " + o.prop_2.toString());




Топикстартеру: вобщем, про наследование в 2-х словах действительно не объяснить. Лучше бы почитать что нибудь по JavaScript (спецификации там или книжки). Но если что не понятно - спрашивайте, попробуем объяснить Улыбка 
« Последнее редактирование: 15 Август 2008, 20:04:28 от 3V » Записан

kirill0072
Пользователь
***
Офлайн Офлайн

Сообщений: 44


Просмотр профиля
« Ответ #9 : 18 Август 2008, 21:20:47 »

ну кое что понял(огромное пасиба тем кто принимал в этом участие)

но часто нарываюсь на кучу определений

класс, тип объекта, экземпляр

как всё это работает вроде я понимаю, мне нужны только определения(желательно объяснить на пальцах)

Записан
holdmann
Пользователь
***
Офлайн Офлайн

Сообщений: 262



Просмотр профиля
« Ответ #10 : 19 Август 2008, 23:31:28 »

встает вопрос: "тебе зачем определения? Ты кодить собрался или теорию преподавать?"
Записан

Елси вы хотите купить, продать, отремонтировать автомобиль в Ижевске: Вам сюда =)
(c)holdmann
kirill0072
Пользователь
***
Офлайн Офлайн

Сообщений: 44


Просмотр профиля
« Ответ #11 : 21 Август 2008, 19:34:38 »

просто в некоторых книгах "её" очень много....
Записан
WideWeb
Пользователь
***
Офлайн Офлайн

Сообщений: 36


Просмотр профиля
« Ответ #12 : 21 Август 2008, 22:48:11 »

Да, видимо автору темы не хватает практического опыта. Можно только посоветовать поучиться на примерах.
Из вариантов обучения на примерах можно предложить скачать побольше скриптов и исследовать их.
Одним из крупных скриптохранилищ является hotscripts.com
Записан
Snowcore
Интересующийся
**
Офлайн Офлайн

Сообщений: 18



Просмотр профиля WWW
« Ответ #13 : 19 Сентябрь 2008, 19:11:04 »

довольно интересно материал изложен здесь:
http://www.javascriptkit.com/javatutors/oopjs.shtml
Записан

Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2015, Simple Machines Valid XHTML 1.0! Valid CSS!