Изучаем ООП Надо создать класс с полями для хранения данных. Пусть класс будет называться Ученик. Полями будут Фамилия, Имя, класс. Допустим, что выводить эти данные будем в ДатаГридВью. А для ввода использовать текстбоксы. class Student { private string Surname, Name; private int NumClass public surname {get;set} public name {get;set} public numClass{get;set} } Это создали. Далее надо прописать пользовательский конструктор. А вот тут я поймал клина. Всмысле, а что там можно прописать? Какие данные использовать для инициализации? И как все это использовать на практике? Ну использовать правильно, имею ввиду. Как в основном коде создавать эти объекты, не на уровне лексики, а вот используя ООП правильно? Я не понимаю. Я вот сейчас просто создаю 1 объект, через текстбоксы присваиваю полям значения и записываю в датагридвью. Зачем мне конструкторы? И как делать правильно?
>>164560665 Не благодарю. А смысл? Нет, ну я понимаю на таких примерах для чего они, но на моем не могу понять. Может я чего неверно делаю? И не так использую свой класс.
>>164560507 (OP) Конструктор это структура определяющая состав класса при инициализации, копировании или удалении, для всего этого есть свои формы конструкторов. Если мы говорим о конструкторе по умолчанию, который указывает что и чем заполнять при создании экземпляра, например в твоем примере: class Student { private string Surname, Name; private int NumClass public surname {get;set} public name {get;set} public numClass{get;set} Student(){NumClass = 0; surname = "aaa";...} } Таким образом при создании экземпляра, эти две переменные по умолчанию будут заполнены этими данными. Чо с этим можно сделать? Ну например можно прописать конструктор с условиями, для того чтобы инициализировать экземпляр, вводя данные в мейне: class Student { private string Surname, Name; private int NumClass public surname {get;set} public name {get;set} public numClass{get;set} Student(){NumClass = 0; surname = "aaa";...} Student(int Num, string Nm, string Srn){NumClass = Num; Name = Nm; surname = Srn; } Таким образом , имея два конструктора появляется возможность создавать экземпляры классов с параметрами и без: int main() { student stu(); // будет создан экземпляр класса, с использованием первого конструктора, т.е. NumClass = 0; surname = "aaa" student stu2(4, Masha, Ivanova); //будет создан экземпляр в котором значения номера класса, имени и фамилии будут заполненны данным в соотвествии с кодом конструктра с параметром. }
>>164562062 Ну а в моем случае? В моем конкретном примере? Для чего программисту может понадобиться вбивать данные: фамилия, имя, класс и тп в коде программы, если это делает пользователь? Как тут использовать конструктор?
>>164563581 Ну смари, ты прописал конструктор как во втором примере Student(int Num, string Nm, string Srn){NumClass = Num; Name = Nm; surname = Srn; данные переменных Num, Nm, Srn будут вводиться пользователем с помощью интерфейса и дальше по твоему алгоритму сразу будет создан класс с такими параметрами
>>164560507 (OP) ты просто ещё мало изучил, прочитай про паттерны. абстрактную фабрику, например, освой. так у тебя просто недостаточно знаний, чтоб сразу понять, как на практике применять ООП
>>164560507 (OP) Класс это образ того что ты хочешь создать, у него есть свойства Имя,фамилия. Когда ты задействуешь конструктор ты создаёшь объект класса, в нём уже прописано пользователем как он хочет чтобы выглядел этот объект: Student Ivan = new Student("Ivan", "Dolvich", 19); Это уже конкретный объект у которого есть свои характеристики, ты можешь их объединить в массив и назвать массив как группу, вывести имена всех студентов из группы итд. Ввод пользователя можно опять же проверять в конструкторе.
>>164563926 погоди, погоди. Я вот класс использовал только для доступа к полям, чтобы записать в них то, что введет в текстбокс пользователь и потом в датагридвью эти данные взять и вывести. Ну т.е. создаем объект класса
Student Stud1 = new Student(); Stud1.name = textBox1.Text; Вот записали в поле то, что пользователь ввел в текстбокс. Далее в датагрид вывели.
И...и... Все. Где тут надо создать второй объект и для чего? Как тут использовать конструктор? Где я делаю неправильно?
>>164564976 >в нём уже прописано пользователем как он хочет Погоди, а разве пользователь вот это прописывает? Student Ivan = new Student("Ivan", "Dolvich", 19); Это же не пользователь, а разработчик прописывает.
>>164565117 Не слушай навозника не можешь = не хочешь. Как говорил мой препод, люди делятся на 3 типа , те кто понимают ООП сразу, таких 2% , те кто понимает но не запоминает, таких 97%, те кто не понимает, потому что не слушает это 1%. Врожденные таланты это бред, за всеми успешными людьми (кроме российских бизнесменов и чиновников) стоят годы упорного труда. Так что ебаш аноний, и будет дано тебе по заслугам твоим.
>>164565247 Пользователь вводит эти данные через UI(textbox, combobox, datagreed..), на основе этого создаётся объект. А всё включая UI ты должен писать ручками
>>164565177 ты уже заебал тупить конечно, но я готов помогать тебе, пушто сам тупил поболе твоего. string name = textBox1.Text; string surname = textBox2.Text; Student Stud = new Student (name, surname);
Ну всмысле я понимаю, что вот это Student Ivan = new Student("Ivan", "Dolvich", 19); Создает новый объект и записывает в поля не 0 и "", а те значения, которые передаются. Но я не понимаю на практике для чего это? Вот конкретно эта конструкция, к примеру: Student Ivan = new Student("Ivan", "Dolvich", 19); Зачем создавать ее? К тому же, если мы изначально не знаем, какие данные будут введены в поля. Их вводят уже потом из текстбокса.
>>164565572 Пушто иногда бывает, что нужно заполнять экземпляры одинаковыми данными на некоторые поля, например у тебя в классе есть 4 поля, из них 2 поля будут повторяться в 95% всего проекта, вот ты и пишешь конструктор для этих двух полей, а с остальными уже работаешь вне конструктора.
>>164565506 Ну я напишу этот код. И как тогда вызывать именно конструктор пользовательский, а не обычный? Ну вот в коде у меня будут получается: >вот эта конструкция 1 string name = textBox1.Text; string surname = textBox2.Text; Student Stud = new Student (name, surname);
>и вот эта, конструкция 2 Student Stud1 = new Student(); Stud1.name = textBox1.Text;
А текстбокс он один. Какая из них будет тогда использоваться? Эти же конструкции одно и то же делают - записывают в поля значения.
>>164565177 Менять поля класса просто так не рекомендуется. Stud1.name = textBox1.Text; Это плохой тон, у тебя есть однокурсник его зовут Дима, ты хуяк просто так по мгновению Диму поменял на Машу вроде бы неплохо так незя. Должно произойти событие Метод который позволит изменить Диме имя. Т.е. ООП подразумевает что всё является реальными объектами с которыми есть взаимодействие. Опять же делая так Stud1.name = textBox1.Text; Ты не вводишь проверку которую можно сделать в конструкторе public void Student(string Name) { if(Name.Lenght < 10 && Name.Lenght > 1 && Name != "Залупа") Nm = Name; }
>>164565177 > погоди, погоди. Я вот класс использовал только для доступа к полям, чтобы записать в них то, что введет в текстбокс пользователь и потом в датагридвью эти данные взять и вывести. Ну т.е. создаем объект класса
> Student Stud1 = new Student(); > Stud1.name = textBox1.Text; > Вот записали в поле то, что пользователь ввел в текстбокс. > Далее в датагрид вывели.
> И...и... Все. Где тут надо создать второй объект и для чего? Как тут использовать конструктор? Где я делаю неправильно?
Блять. Вот это: > Student Stud1 = new Student(); У тебя сработал конструктор по умолчанию. Но ты можешь сделать так: Student Stud1 = new Student(textBox1.Text, textBox2.Text, textBox3.Text);
А потом поля этого Stud1 выводить в грид, в небо, в аллаха
>>164566105 >У тебя сработал конструктор по умолчанию. Погоди. Вот я пользователь. Передо мной окно программы. Там есть поле, которое я заполняю данным и кнопка "Записать". Я ввел, нажал на кнопку. И что дальше? Внутри программы что активируется? Конструктор по умолчанию или пользовательский? У нас же есть
>вот эта конструкция 1 string name = textBox1.Text; string surname = textBox2.Text; Student Stud = new Student (name, surname);
>и вот эта, конструкция 2 Student Stud1 = new Student(); Stud1.name = textBox1.Text;
>>164566071 Но у меня проверка же будет при записи в свойствах класса. Потом допишу ее в set{} и все. и как не менять поля класса? для чего они тогда, как не для хранения данных.
>>164567442 ну поясни чтобы я понял. ну правда не догоняю >вот эта конструкция 1 string name = textBox1.Text; string surname = textBox2.Text; Student Stud = new Student (name, surname);
Это записывает в поле name то что введет пользователь
>и вот эта, конструкция 2 Student Stud1 = new Student(); Stud1.name = textBox1.Text;
И эта делает то же самое. И какой из конструкторов-то будет работать?
>>164560507 (OP) > Я вот сейчас просто создаю 1 объект, через текстбоксы присваиваю полям значения и записываю в датагридвью. Зачем мне конструкторы? И как делать правильно? Это уебанство. Вся суть ООП в том, что класс может включать в себя хуеву тучу объектов и наследуемых классов (в которых тоже Зуева тучу объектов). В твоей же программе ты все привязал к конкретным текстбоксам. А если тебе нужно получить эти данные из текстового файла на твоей пеке или из базы данных на сервере, например(да или тупо из других текстбоксов, а не тех что ты указал). Ты будешь создавать новый класс в котором данные получаются нужным способом. Но нахуя, если можно создать 1 класс и использовать его потом без изменений в любых программах независимо от того есть ли в ней три текстбокса из твоего примера или нет. Жутко примитивное объяснение и местные кодеры меня обоссут скорее всего за него, но зато наглядно понятно.
был бы тут хоть один нормальный прогер, уже давно бы посоветовали разработать интерфейс IStudent и наследоваться от него классу, а то не ООП, а кака-то хуйня у ОПа получается
>Нужен интерфейс Нет, сказано же, что это класс для хранения данных, обычный dto, какой нахуй интерфейс.
>Как реализовать конструктор Берёшь и реализовываешь без задней мысли. Не делай пустых конструкторов для инициализации - это гарантирует, что поля будут заполнены все. Не делай конструкторов с частичной инициализацией, лучше используй optional подход. Пример https://pastebin.com/5jb4epaV - здесь фамилия необязательная, может быть null.
А еще делай поля иммутабельными, ибо это класс для хранения данных и ты не хочешь, чтобы его поля можно было менять напрямую, будут проблемы с многопоточностью. В примере это val.
>>164567889 > IStudent Тупица, у тебя у тебя сразу варниг вылезет о нарушении правил именования, школокодер-хелловорлдщик блять. Потом ебись после тебя, думая а хули это я пишу iStudent а мне красным подчеркивает нахуй
>>164569917 Нихуя подобного, это нормальная нотация для интерфейсов, даже видел как её используют. Только всё равно говно, я бы интерфейс именовал как Student, а имплементацию как StudentImpl, либо по смыслу, только в данном случае речь идёт о дто, а значит интерфейс не нужен
>>164569109 >Student Student1 = new Student(); - создаем объект класса Используется пустой конструктор - плохо. Далее ты через сеттеры записываешь данные в созданый объект.
>Student Student 2 = new Student(textBox1.Text, textBox2.Text, textBox3.Text); Вот так заебись. А пустой конструктор удали нахуй, он бесполезен.
>>164570256 он бесполезен? Всмыле эта часть кода не будет работать? А если у меня условия стоит использовать оба конструктора? И по умолчанию и пользовательский?
>>164560507 (OP) В твоём случае конструктор можно не писать, он сам создастся нормальный, как и деструктор. А вообще хули такие вопросы лёгкие это что 11 класс?
>>164570427 Я не знаю на каком языке ты пишешь и можно ли вообще убрать пустой конструктор, но если можно, то лучше его не использовать.
Бесполезен не потому, что не будет работать. Работать будет, но это небезопасно. Если это объект для хранения данных - то в констукторе надо инициализировать все поля.
Вот пример почему: Допустим у тебя есть вариант использовать пустой конструктор. Это значит, что тебе придёттся каждое поле задавать через сеттер. Предположим, что у тебя серьёзная программа и сам класс имеет много полей. Пустым констурктором ты развязываешь себе руки заполнить класс постепенно, в разных слоях, как угодно. И в определённый момент ты можешь забыть последовательность его заполнения и ошибёшься - попробуешь вытащить или использовать какое-либо поле, но оно не будет задано. Это приведёт к ошибкам или крешам. В случае конструктора на все поля + optional подхода ты заранее знаешь какие поля могут быть пустыми и это сможешь обработать без ошибок.
>>164570758 на c# >Бесполезен не потому, что не будет работать. Работать будет, но это небезопасно. Вот я и понять тогда не могу. Какой конструктор будет использован в моем примере? текстбоксы-то одни и те же. Куда данные пойдут в студент1 или студент2? пустой конструктор будет использован или пользовательский? Как понять?
>>164571366 да блин. я понимаю что если () то по умолчанию. Вот в моем коде>>164569109 там есть и по умолчанию конструктор и пользовательский. И оба они записывают данные в поля, которые берут из текстбокса. Ну и в итоге, передо мной эта программа. Я ввел в текст бокс данные и нажал на запись. Что дальше? Какой участок кода будет работать? Этот Student Student1 = new Student(); - создаем объект класса
Student1.Name = textBox1.Text; - в поля записываются данные из текстбокса Student1.Surname = textBox2.Text; student1.NumClass = textBox3.Text;
или вот этот:
Student Student 2 = new Student(textBox1.Text, textBox2.Text, textBox3.Text); - а это типа пользовательский конструктор.
Вот в моем коде>>164569109 там есть и по умолчанию конструктор и пользовательский. И оба они записывают данные в поля, которые берут из текстбокса. Ну и в итоге, передо мной эта программа. Я ввел в текст бокс данные и нажал на запись. Что дальше? Какой участок кода будет работать? Этот Student Student1 = new Student(); - создаем объект класса
Student1.Name = textBox1.Text; - в поля записываются данные из текстбокса Student1.Surname = textBox2.Text; student1.NumClass = textBox3.Text;
или вот этот:
Student Student 2 = new Student(textBox1.Text, textBox2.Text, textBox3.Text); - а это типа пользовательский конструктор.
>>164572476 >ну и куда запишутся данные из текстбоксов? и какой конструктор будет работать? >Student Student1 = new Student() Конструктор создает первый объект >dataGridView1.Rows.Add(Student1.Name,Student1.Surname,Student1.NumClass); Метод записывает (ведь так?) данные в переменные первого объекта >Student Student 2 = new Student(textBox1.Text, textBox2.Text, textBox3.Text); Конструктор создает второй объект >dataGridView1.Rows.Add(Student2.Name,Student2.Surname,Student2.NumClass); Метод записывает данные в переменные второго объекта
>>164573055 >Что дальше? Какой участок кода будет работать? Работать буду оба, в порядке очереди, в чем проблема? Если конечно нет ошибок и одно может работать без другого
>>164573382 Они и так используются. Проблема не в этом. Ты нагородил ахинеи. Начни заного.
Ты вообще понимаешь как и что у тебя должно работать? Возьми листок и ручку. Сформулируй в одном предложении что делает программа. Напиши сверху листа. Ниже нарисуй блок схему: какие данные вводятся и что должно получится в результате. Подумай, какие методы и классы тебе нужны, какие переменные. Распиши логику на бумаге. Потом переделай. И ещё раз. Теперь иди пиши код.
>>164573420 У меня уже появляются мысли о дропе, но я уже вложил 800 рублей (вклад уровня /b) в учебник и его надо бы отработать. Сейчас 6-я глава из 15.
>>164573922 В задании написано, что надо использовать оба конструктора: и пользовательский, и по умолчанию. Т е. Сперва создать класс имеющий поля для хранения данных, а потом про инициал зимовать с помощью конструкторов. Ну и как это сделать? Я вот не догоняю. На простых примерах вроде ясно, но вот на конкретно моём не понимаю.
>>164565853 Ты пеня... У тебя есть два РАЗНЫХ конструктора. Первый не принимает параметров, второй принимает два (или сколько тебе нужно) параметров. То есть перегруженный и не перегруженный. Если хочешь вызвать не перегруженный, пишешь - Student nSt = new Student(); перегруженный - Student nSt = new Student(name, surname, numClass);
>>164575732 >"про инициал зимовать" Как-будто так трудно догадаться, что это проинициализировать. Вопрос? Задание стоит так: Создайте класс Студент с полями Фамилия Имя Класс. Далее создать объекты класса. Объекты должны быть созданы с помощью конструктора по умолчанию и пользовательского. Я создал класс. В нем поля. А вот как мне сделать так, чтобы у меня были два объекта, если оба берут данные для полей из текст-бокса?
>>164576146 Как вызывать их на уровне синтаксиса я знаю. Суть в другом. Я не понимаю как их использовать на моем примере. >>164569109 Я же говорю, вот я создал два объекта и они, выходит, что принимают одни и те же данные из текстбокса и как мне тут подсказывают выполняются друг за другом. Ну и что-то тут не так, верно? Ну и как использовать оба конструктора и моем примере?
Тащемта секретов тут нет class Student: ....def __init__(self, family, name, num_class): ........self.family = family ........self.name = name ........self.num_class = num_class student = Student('Vasua', 'Pupkin', 3)
>>164577679 суть не в том. Я кажется не могу понять на уровне общей архитектуры. Еще раз. Вот есть 3 текстбокса и кнопка записать. Есть датагридвью, который ранее записанное в эти текстбоксы сохраняет и отображает списком. И как мне тут использовать конструкторы для создания объектов?
>>164578109 >Не совсем понятно что у тебя не работает. Да я же говорю уже 10 раз: Задание стоит так: Создайте класс Студент с полями Фамилия Имя Класс. Далее создать объекты класса. Объекты должны быть созданы с помощью конструктора по умолчанию и пользовательского. Я создал класс. В нем поля. Ну и как мне тут использовать оба конструктора? Мне надо создать 2 объекта получается. А где их тут уместить? Чтобы это выглядело нормально?
ДИМОЧКА пришёл в офис очень несчастным и подавленным. Всё, что он хотел, это просто поесть в абсолютной тишине наедине с собой. — Что стряслось? — прервал раздумья ТИМЛИД. — Мы программируем, как мудаки — нервно ответил ДИМОЧКА, — У всех программистов есть по машине, крутому телефону и толпе шлюх! А у нас нету нихуя совершенно! В офисе нависла тишина. Через несколько секунд ТИМЛИД прервал её: — Послушай, — обратился он к ДИМОЧКЕ , протянув ему ОПЕРАТИВКУ. — Что это? — Да послушай говорю. ДИМОЧКА прислонил ухо к ОПЕРАТИВКЕ и услышал шипение. — Ну и что? — спросил ДИМОЧКА . — Шипит? — Шипит. — Это она так нагрелась от нашего кода! — весело сказал ТИМЛИД. — И что? Немного помолчав, ТИМЛИД сказал: — Не важно, сколько у тебя денег, ДИМОЧКА . Зачем тебе они, если у тебя на лице кусок расплавленной пластмассы, а я выпишу денег на новую оперативку и распилю бюджет, только для этого ты и нужен, мудак... После этих слов ДИМОЧКА повесился.
К нам в айти отдел пришёл новый сотрудник. Нужно сказать, что у нас в отделе работают почтенные крестогоспода. Новичка посадили за компьютер, но не успели даже дать задание, как он начал кодить. Начальник из любопытства подошёл посмотреть, что он там написал. В течении секунд тридцати он побледнел, затем посинел, затем покраснел, а потом трясущимся от нескрываемого гнева голосом сказал: - Это же Абстрактная фабрика! На чём ты кодил до этого? - На Джаве. - Жабапидор! - в один голос заорали все 20 человек. - Жабапидор! Жабапидор! Жабапидор! Кто-то включил сирену. Над дверьми замигали красные лампочки тревоги. На окнах мгновенно сомкнулись плотные жалюзи. В офисе одновременно бывает два отдела человек по сорок. На обеде вся эта толпа собирается на первом этаже, где яблоку негде упасть. А поэтому, как охранники ни пытались вырвать джавапидора из рук разъяренной толпы, им это не удалось. По всему офису стоял сплошной рев: - Жабапидор! В коридоре его сразу же сбили с ног. Используя галстук как поводок, его тащили через весь коридор, передавая из рук в руки. Поэтому получалось так, что никакого движения в коридоре не происходит, но и джавапидора тоже нет. Его заволокли в каптерку под лестницей, где хранятся ведра и швабры с тряпками, и там закрыли. Под конец рабочего дня он всё же появился. За получасовой обед его изнасиловали несколько человек. Сопротивляться было бы бесполезно. Через день на нем чистым оставалось одно лицо, а на теле не было живого места. Он превращался в мразь, в животное. Его били все, даже дизайнеры и уборщицы. Его заставляли есть говно и опарышей. В очко ему совали битые лампочки, живых птиц и змей. Он стал «дельфином» – в нужнике пятнадцать дырок, он ныряет в первую, выныривает, ныряет во вторую... И так – до конца. От него постоянно воняло. С ним невозможно было рядом находиться. Был такой случай: к нам устроился работать Степаныч. Степаныч сидит на толчке, а кто-то снизу через очко хватает его за яйца. Степаныч с воплем вылетает в коридор без штанов. Напротив - айти отдел. Смех не стихал долго... Потом Степаныч забил его кирзовым сапогом насмерть. Менты как узнали, что сдох джавапидор даже дело заводить не стали.
я начинаю кажется догадываться. Подтвердите так это или нет есть 3 текстбокса. создаем 4 объекта. если заполнены все 3 текстбокса, то работает конструктор в котором 3 аргумента если заполнены 2 текстбокса, то конструктор с 2 аргументами если заполнен 1 текстбокс, то конструктор с 1 аргументом если все 3 поля пустые, то конструктор по умолчанию
Есть ли в природе хоть один жавапидорас, который знает что-нибудь кроме джавы? Ну хотя бы ту же Скалку, работающую на jvm. Причем `знает' не в смысле запускал 2 раза и посчитал рекламную хуйню с сайта, а действительно хорошо знает. Работал минимум полгода, знает, решению каких проблем адресован язык, знает, зачем он нужен и какие преимущества имеет перед джавой, хорошо понимает, какие принципы заложены в систему типов и нахуя они вообще туда заложены, знает, как она жутко она фейлит на оптимизации хвостовой рекурсии, знает, как она затирает типы и вызывает методы через рефлексию, знает, почему на уёбищной jvm по-другому не сделать, знает, почему неленивые языки - говно, знает, что такое abstraction penalty и почему любой джаваынтырпрайз адово тормозит, несмотря на превосходные результаты на шотауте, самый лучший мусоросборник и hotspot до которого всему немейнстиму в говне плыть и плыть, знает, почему джава - не язык программирования для нормальных людей, а говно для переквалифицировавшихся таксистов? Нет таких? Ни одного? Только студентота и дрочеры на абстрактные фабрики абстрактных аннотаций виртуальных плагинных шин? Так я и знал. И это программисты. Говно какое-то. Пидоры блядь.
Ёбаным жабоиндусам, напоминаю разницу. Зоопарк вопросов: - где замыкания? - где свойства? - где шаблоны? Разработчики Sun вынуждены только облизываться. Даже генерики, введённые в 5-й версии Java — не более, чем syntactic sugar. Дотнетовские генерики это реально поддерживаемые платформой типы, которые расширяются на лету при загрузке, котрые оптимизируются JIT-компилятором. Для Java генерики существуют только в коде и ни JIT, ни загрузчик классов их никогда не видит. Поэтому проблемы боксинга, преобразования типов в runtime просто скрыты от программиста. - где делегаты/евенты? - где partial-классы? - где детерминированное освобождение ресурсов (ключевое слово using + интерфейс IDisposable)? - где оптимизация JVM для расширений процессоров? - где аналог linq и в частности удобные мапперы? - где расширения методов класса? - где скрытая имплементация интерфейсов? - где перегрузка параметров функций? - где нормальное потребление памяти приложением? - где быстрая работа приложения? - где нормальные иде, с полноценными дизайнерами? - где пользовательские value types? - где методы у инстансов value types? - где var и анонимные типы - где перегрузка операторов? - где оптимизиции хвостовых вызовов? (в свете фунционального хайпа это должно вызывать некоторый батхёрт) - Где чёткое разделение домены и сборки? Это не учитывая, целый ворох технологий недоступный понимаю жабоиндусов, такие всякие сильверлайты/вин-веб/формочки, впф, XNA, список можно продолжать бесконечно, как впрочем и список ущербности жабы... Всего, чего нет в жабе, автоматически объявляется хуитой, как только это появляется в жабе, это автоматически становится нехуитой. При этом, требуется сделать вид, что хуитой это называл кто-то другой.
>>164577297 Создай другой текстбокс под второй объект или создавай объекты поочередно, меняя значения в текстбокса перед каждым созданием или вводи значения в текстбокс через запятую, разбивай строку на части и для каждого значения делай объект или забей хуй на текстбоксы вообще, в задании про них ни слова. Куча вариантов же, как хочешь так и делай.
>>164578999 Но это же хуита какая-то. Зачем текстбоксы создавать для второго объекта отдельного? А если объектов будет 3? А 4? То ли я не понимаю истинного назначения этих констркуторов, то ли хуй знает. Вроде на простых примерах все ясно. А тут нет.
>>164579190 Да блядь, назначение конструктора это выделение в куче памяти под объект. Помнишь new delete вот это вот всё, не ебу какой там у тебя язык, вот это та же хуета, только для класса. Конструктор и деструктор.
// Вот это конструктор класса. public void Student(string studName, string studSurname, string classname) { this.Name = name; this.Surname = studSurname; this.numClass = classname; }
public string GetName() { return this.Name; }
public string GetSurname() { return this.Surname; }
public string GetClass() { return this.numClass; }
}
// вот тут ты создаешь 2 объекта класса Student student1 = new Student("Коля", "Петучный", "1А"); Student student2 = new Student("Абу", "Нариманов", "1Б");
Хули тебе непонятно.
Мы сделали поля Name, Surname, numClass закрытыми, чтобы какой-нибудь левый "хакер" не смог их поменять. Их можно создать только 1 раз, и нельзя поменять, так как методов для этого нет. Также ты не сможешь создать новый класс на основе предыдущего, так как класс Student является конечным. Также мы сделали методы для того, чтобы юзер мог узнать имя, фамилию и класс объекта. Сейчас классы student1 и student2 создаются в консольке ручками. Но на практике должна быть програмка, при помощи которой пользователь мог бы вписать данные в поля (input), а твоя програмка на основе этих данных сама создавала объект при помощи конструктора Student.
Я бы порекомендовал тебе почитать Джозева Блоха "Java. Эффективное программирование". Там, конечно, все на java, но там очень хорошо объясняется суть ООП. А учитывая то, что ты пишешь на c#, тебе будет несложно, ведь синтаксис схож.
>>164579190 > Но это же хуита какая-то. Зачем текстбоксы создавать для второго объекта отдельного? Да хуй его знает, что тебе надо. Я тебе еще способов накидал. > То ли я не понимаю истинного назначения этих констркуторов, то ли хуй знает. Вроде на простых примерах все ясно. А тут нет. Как связаны конструкторы и текстбоксы? Ты просто за какими-то хром присваиваешь двум объектам одни и те же данные из одних и тех же полей.
>>164579259 Для того, чтобы создавать объекты учеников на основе класса "Ученик". Конструктор дает тебе возможность создать объект на основе класса этого конструктора.
>>164579474 Какие два? Для того, чтобы заебись копировалось нужен конструктор копирования
Конструктор копирования нужен нам для того, чтобы создавать «реальные» копии объектов класса, а не побитовую копию объекта. Иногда это принципиально важно. Такую «реальную» копию объекта надо создавать в нескольких случаях:
когда мы передаем объект в какую-либо функцию в виде параметра; когда какая-либо функция должна вернуть объект класса в результате своей работы; когда мы в главной функции один объект класса инициализируем другим объектом класса. Конструктор по умолчанию создаётся, когда ты не указал конструктора вообще, как ты там делал до этого, на самом деле конструктор у тебя всё равно был.
>>164579415 >// вот тут ты создаешь 2 объекта класса
Т.е. чтобы добавить строчку в датаГрид я такой открываю экзешник в визуал студио и пишу там: >Student student2 = new Student("Абу", "Нариманов", "1Б");
>Но на практике должна быть програмка В том и суть, что я не понимаю как это на практике сделать. То что ты написал я уже написал до тебя и это понятно. Мне именно Но на практике должна быть програмка, при помощи которой пользователь мог бы вписать данные в поля (input), а твоя програмка на основе этих данных сама создавала объект при помощи конструктора Student. Вот конкретно у меня есть 3 текстбокса и кнопка записать в датагридвью. Как мне сделать так чтобы тут создавался новый класс по конструктуру пользовательскому, да еще и по умолчанию тоже. Вот это можешь мне объяснить?
>>164579474 >Как в моем сраном примере использовать два конструктора? Я этого не понимаю. Есть у тебя 2 ученика. Тебе надо ввести их имена, фамилии и классы. Один ученик сразу говорит тебе, что его зовут Вася Сидоров, и он учится в 1В классе. А вот второй ученик не знает, в каком классе он учится. И ты кидаешь его в дефолтный класс 1А. Для этого ты используешь разные конструкторы одного класса: Это для 2 студента, который не знает свой класс public void Student(Name, Surname) { this.Name = Name; this.Surname = Surname; this.numClass = "1А"; }
Это для 1 студента, который все знает public void Student(Name, Surname, numClass) { this.Name = Name; this.Surname = Surname; this.numClass = numClass; }
Эта дрисня называется перегрузкой методов. А если у тебя будет студент, который вообще нихуя не знает, ты можешь создать еще один конструктор, который будет задавать пиздюку дефолтные имя, фамилию и класс.
>>164579693 >Для того, чтобы создавать объекты учеников на основе класса "Ученик". Бляяяяя!!! В теория я знаю. Ты можешь мне пояснить как на моем примере это будет выглядеть?
>>164579866 У тебя недостаточно знаний, чтобы написать эту програмку. Учи язык нормально, а не прыгай с основ в написание пользовательского интерфейса. Найди нормальную книгу и по ней учись. Я не могу объяснить тебе, как сделать подобную программку, потому что ты не знаешь основ, которые используются для её написания. Так понятно?
>>164580009 Бляяя. Я уже визжать сейчас буду. С такими примерами я знаю как это работает. Я не пойму как конкретно на моем примере это сделать? С текстбоксами, куда пользователь сам вводит данные. Вот как?
>>164580358 на каком примере? Вы мне все суете под нос то, как программист может быстро и легко создавать новые объекты класса, пользуясь конструктором. Это мне ясно. Мне не ясно как создавать эти объекты, используя конструктор при вводе данных из текстбокса.
>>164580312 >>164580178 >Какие пользовательские интерфейсы? 3 текстбокса >Что тут сложного? Ничего, но ты же завис на этом. Вот у тебя есть 3 текстбокса, из них ты берешь информацию, закидываешь её в конструктор, и запускаешь. Если ты не знаешь, как вытащить данные из текстбоксов, то учи основы.
>>164580439 >Каких основ, мать твою? Как брать строки, разбивать их по словам и засовывать каждое слово в элемент массива. >Каких знаний? Знаний о массивах
>>164580573 Блять. Как вытащить данные я знаю - это вообще не проблема. Проблема в другом. Мне надо использовать несколько конструкторов. Т.е. создавать несколько объектов. И я не вижу того, как это сделать на моем примере. Я уже умею создавать объект, использовать конструктор по умолчанию и выводить все это в датаградвью. Я не могу понять как тут использовать два объекта с разными конструкторами.
>>164580617 Что сложнее? У меня уже есть класс с полями. В основном коде создается объект класса. В поля объекта вносят данные из текстбоксов. В датагридвью все это отображается. Все работает. Теперь надо как-то использовать два конструктора. Вот тут и проблема, что я не понимаю как их тут можно правильно использовать.
>Я не могу понять как тут использовать два объекта с разными конструкторами. 1 конструктор public void Student(Name, Surname) { this.Name = Name; this.Surname = Surname; this.numClass = "1А"; }
Student student1 = new Student("Вася", "Пупкин") // создаем объект при помощи первого конструктора. Ему автоматически задастся класс 1А Student student2 = new Student("Нариман", "Намазов", "2Б") // создаем объект при помощи второго конструктора.
>>164581030 >Student student1 = new Student("Вася", "Пупкин") Сука. У меня уже истерика. Т.е. я открываю это программу свою. Вижу там датагридвью с информацией, списком. Вижу текстбоксы для ввода информации для новой строчки. И кнопку записать.
И что я делаю? Правильно нахуй! Открваю эту программу через вижуал студию и пишу там вот эту хуету. потом перекомпилирую ее.
Еще раз. Еще раз я повторю. Мне не надо создавать новый объект в коде. Это я умею. Мне надо, чтобы этот объект по конструктуру создавался сам исходя из того, что вводит пользователь в текстбокс.
>>164581321 >name, surname=input().split() >Как брать строки, разбивать их по словам и засовывать каждое слово в элемент массива. >пердолинг Типа вот так это делается в питухоне.
>>164581058 О да, да. Давай напиши еще раз, уже 10. Ты не понимаешь что я спрашиваю? Ты хату спрашиваешь. Твоя проблема в том что ты пытаешься получить одновременно 2 набора данных из своих текстбоксов. Эта проблема никак не связана с конструкторами и их количеством.
>>164580998 >>164580826 Ты на редкость упертый даун. Знаешь как это со стороны выглядит?
Стоит школьник в подземном переходе и спрашивает у каждого: "Дядь, мне в школе задали дилдак в жопу засунуть. Я засунул дилдак, огурец и бусы. Нужно ещё яйца резинкой перевязать, подскажи как сделать?
Мимопроходилы задумчиво чесали лысины и отвечали: "Так ты уже засунул дилдак, задание выполних, хули надо?". Другие на собственном примере наглядно показывали что, как и куда. Третьи утверждали, чтобы выполнить третье желание нужны резинка и яйца, чего у школьника не было...
Короче блять, ты изобретаешь ебливые велосипеды в которые хочешь засунуть ещё велосипедных костылей просто потому что НАДА КАКТА ИСПОЛЬСАВАТЬ.
>>164581325 Блядь, как ты заебал. Вот сейчас у меня реально бомбануло, ебаная ты зелень. Держи сажи себе в ебало, мразь.
Ты не знаешь, как связать несколько полей на страничке с кодом, сука ты тупая. Ты не умеешь нормально формулировать запросы.
Так блядь, формулирую вопрос, который ОП должен был задать в самом начале:
"Господа, у меня проблема.
У меня есть страница с 3 полями ввода. И есть код, создающий объект класса Student. Мне надо передать данные из этих 3 полей в конструктор Student(Name, Surname, numClass), но я не знаю, как передать эту информацию."
>>164581473 Ты реально ужасно передаешь информацию, долбоеб.
>>164581714 Но зачем? Зачем тратить время и силы на пердолинг, язык должен быть твоим инструментом, средством выражения мысли, а не тем, с чем тебе приходится бороться и пердолиться постоянно.
>>164581513 Я не пытаюсь. В задании сказано использовать 2 контрструктора. Я пытаюсь придумать как их сипользовать. Но не выходит. Вот я и спрашиваю. Мне тут пишут: Бля, вот как это делается: Student student1 = new Student("Вася", "Пупкин") Но мне не это нужно. В моем условии даннеы вводятся из текстбокса и никак иначе.
>>164581325 Это потому что ты ёбаный олень. Ты описываешь ебучие конструкторы в классе. Конструкторы описываешь с учетом нескольких вариантов (1 текстбокс пустой, 2 заполненных - из заполненных взять значения, вместо пустого присвоить значение по умолчанию и т.д.) А потом в основном блоке нажатием на кнопку просто вызываешь этот ебучий конструктор, присвоив переменным конструктора данные из текстбоксов. >>164581473 Норм,просто к нему подход другой нужен
>>164581695 >У меня есть страница с 3 полями ввода. И есть код, создающий объект класса Student. Мне надо передать данные из этих 3 полей в конструктор Student(Name, Surname, numClass), но я не знаю, как передать эту информацию."
Ты неверно понял. Как передать я знаю. Я еще раз повторюсь, что у меня все работает как надо. Я не могу использовать 2 конструктора.
>>164581871 >Конструкторы описываешь с учетом нескольких вариантов (1 текстбокс пустой, 2 заполненных - из заполненных взять значения, вместо пустого присвоить значение по умолчанию и т.д.)
НУ а так хули я это написал вот тут>>164578530 еще час назад назад и мне сказали, что я ХУЙ.
>>164581931 Так он не понимает нихуя,что ему предлагают именно то,что нужно. Потому что тупой ебан. А значит нужен следующий подход - либо объяснить ему,что он тупой ебан и сам нихуя не понимает,чего хочет, либо забить хуй и кинуть ссаными тряпками. Я первый вариант попробовал,если не поймёт,пойду по второму - сагану и скрою
>>164581851 Тебе тут 10 раз показали как из использовать. Вместо конкретных данных вставляет в конструктор просто строки на каждое поле. Инициализируешь их своими сраными текстбоксами. Все, конструктор перегружен и объект создан. Потом берешь обычный конструктор, создает пустой объект и присваиваешь его полям значение все тех же текстбоксов. Все, второй объект создан. Оба конструктора используются и делают то же самое, каждый для своего объекта. Условие задачи выполнено.
>>164582141 Там несовсем верно написано. Есть 3 текстбокса. В классе создаешь 4 конструктора. В 1 конструкторе не пишешь аргументов (это дефолтный конструктор). Во 2 в аргументах пишешь только имя В 3 пишешь имя и фамилию В 4 пишешь имя, фамилию и класс.
Потом просто заполняешь поля нажимаешь в гридвью кнопочку отправить, и объект сам создается, тебе не нужно его создавать ручками.
Так понятно? А вообще, тебе нужно в гриде написать функцию, которая проверяет, заполнены ли поля, и выдает ошибку, если какое-либо поле не заполнено.
>>164582141 Потому что ты объясняешься как мудак. В описании класса ты нихуя объектов не создаёшь. Ты просто описываешь в классе конструкторы. А создаешь объекты вызовом конструкторов.
>>164582240 блииииа. это тоже было. еще 2 часа назад.
Вот в моем коде>>164569109 там есть и по умолчанию конструктор и пользовательский. И оба они записывают данные в поля, которые берут из текстбокса. Ну и в итоге, передо мной эта программа. Я ввел в текст бокс данные и нажал на запись. Что дальше? Какой участок кода будет работать? Этот Student Student1 = new Student(); - создаем объект класса
Student1.Name = textBox1.Text; - в поля записываются данные из текстбокса Student1.Surname = textBox2.Text; student1.NumClass = textBox3.Text;
или вот этот:
Student Student 2 = new Student(textBox1.Text, textBox2.Text, textBox3.Text); - а это типа пользовательский конструктор.
Т.е. вопрос. Как сделать так чтобы не работали сразу оба конструктора и не записывали одно и то же в датагридвью.
>>164582355 > А вообще, тебе нужно в гриде написать функцию, которая проверяет, заполнены ли поля, и выдает ошибку, если какое-либо поле не заполнено. У меня есть такая функция, но придется ее убрать видимо, чтобы по заданию использовать несколько конструкторов.
>>164582582 Ты даже не пытаешься. Ты просто повторяешь одно и тоже по кругу. Тебе тут 5 разных решений предложили. Чуть ли не каждую строчку обсосали, но нет, ты продолжаешь задавать вопросы "Какой участок кода будет работать?" в 15 строчках.
// Вот это конструктор класса. public void Student(string studName, string studSurname, string classname) { this.Name = name; this.Surname = studSurname; this.numClass = classname; }
}
В зависимости от количества переданных в конструктор аргументов программа сама выберет нужный конструктор. Если аргументов не будет, то выберет 1 конструктор, если будет 1 аргумент, то второй, если 2, то третий,если 3, то 4.
ВОТ ТАК ДЕЛАТЬ НЕ НУЖНО: Student Student1 = new Student(); - создаем объект класса
Student1.Name = textBox1.Text; - в поля записываются данные из текстбокса Student1.Surname = textBox2.Text; student1.NumClass = textBox3.Text;
>>164582582 Ебать тебя рельсой. Серьёзно. Ты постишь куски кода и спрашиваешь "А чо буит работать?". Да хуй тебя, оленя, знает,чо работать будет. Кидай полный код (это и описание класса и основной блок,где кнопка твоя описана).
>>164583010 >Ты наркоман? Ну типа Student1.Name = 2, new Student(2) рибят почему у меня и там и там 2????777 Как сделать чтобы там 2 а там 3 7?7777777?7?7
>>164582948 >В зависимости от количества переданных в конструктор аргументов программа сама выберет нужный конструктор. А если текстбокс пустой, там же все-равно 0 или "" передается и это будет считаться за аргумент и всегда будет работать 4 конструктор. И как быть?
>>164583240 Ты вообще пиздец. Вот тут, еще раз >>164582355 >А вообще, тебе нужно в гриде написать функцию, которая проверяет, заполнены ли поля, и выдает ошибку, если какое-либо поле не за
>>164583333 объект создается до записи в датагридвью. Так что причем тут проверка в датагридвью? Я тебюе про то, что всегда будет работать тот конструктор, где якобы все текстбоксы заполнены, потому что пустой текстбокс - это 0 или "".
>>164583463 Во второй конструктор запишется, ведь у тебя в конструкторе 3 аргумента. Если бы конструктор вызывался без аргументов - писалось бы в первый конструктор, который дефолтный.
>>164583614 >объект создается до записи в датагридвью. НИ-ХУ-Я. Объект создается после того, как ты отошлешь данные из строк в конструктор.
>Так что причем тут проверка в датагридвью? При том, что если тебе не нужно, чтобы ты пустые строки отправлял в конструктор, проверяй, чтобы поля были не пустые.
>>164583964 Нет, если строка пуста, под текстовым полем должна появиться надпись, что строка пуста. И ничего не должно создаваться. И вот тут мы плавно подступаем к тестированию кода, выбрасывании ошибок и прочему говно.
>>164584057 И хули? Проверяй свои текстовые поля, если строка пуста, выбрасывай ошибку. Если не пуста, создавай объект. Потом пиши куда тебе это там надо, яебал твои датагридвью, не ебу, что это такое.
>>164584565 Ну так поэтому я посчитал ; на ифе за очепятку,а конструктор - за выполнение при истине. И бомбанул. В общем, я убёг,удачи тебе с необучаемым =)
>>164584802 Твои проблемы. Проверяй, если значение поля не равно false, то передавай его в конструктор. Если равно false, то не передавай его и все последующие. Потому что пустая строка и 0 == false
Кстати, вот тут у тебя ошибка: Student Stud1 = Student(Stud1.surname, Stud1.numClass); Ты создаешь объект и пытаешься сослаться на его же методы. У тебя компилятор ошибку выкинет.
Надо создать класс с полями для хранения данных.
Пусть класс будет называться Ученик. Полями будут Фамилия, Имя, класс.
Допустим, что выводить эти данные будем в ДатаГридВью. А для ввода использовать текстбоксы.
class Student
{
private string Surname, Name;
private int NumClass
public surname {get;set}
public name {get;set}
public numClass{get;set}
}
Это создали. Далее надо прописать пользовательский конструктор. А вот тут я поймал клина.
Всмысле, а что там можно прописать? Какие данные использовать для инициализации? И как все это использовать на практике? Ну использовать правильно, имею ввиду.
Как в основном коде создавать эти объекты, не на уровне лексики, а вот используя ООП правильно? Я не понимаю.
Я вот сейчас просто создаю 1 объект, через текстбоксы присваиваю полям значения и записываю в датагридвью. Зачем мне конструкторы? И как делать правильно?