Вопросы с тегами [oop]

1

голосов
1

ответ
63

Просмотры

Абстрактный строитель построения неизменяемого объекта

У меня следующий код, реализующий абстрактный строитель (как в эффективной Java книги): интерфейс I {I Ret (); } Абстрактного класса А реализует I {частной Строки s = «»; А (построитель б) {ы = шс; } @Override общественного I RET () {Строка s = "какая-то новая строка из известково."; // ЗДЕСЬ МНЕ НУЖНО ПОСТРОИТЬ класса B // ЭТО ПРОБЛЕМАТИЧНОСТЬ ЛИНИИ НИЖЕ
Bojan Vukasovic
1

голосов
1

ответ
71

Просмотры

Обеспечение открытого закрытого принципа (SOLID) Использование интерфейса

У меня есть несколько типов вариантов оплаты (нашивки, Paypal, PayUMoney и т.д.). Я хочу, чтобы создать отдельный класс для каждого типа платежа и интерфейс оплаты должны быть реализованы те классы, как это, интерфейс PaymentInterface {общественная функция оплаты ($ Params); } Класс нашивка реализует PaymentInterface {публичной функция оплаты ($ Params) {...}} Класс Paypal реализует PaymentInterface {публичной функции оплата ($ Params) {...}} Из моего основного класса, я хочу использовать способ оплаты. Я пошлю данные платежа на мой основной метод и хочу, чтобы динамически определять способ оплаты. класс PaymentModule {общественная функция confirmPayment (запрос $ запроса) {// создать объект класса оплаты // $ OBJ = новый PaymentTypeClass ** (Проблема здесь) ** // $ obj-> платеж ($ PARAMS)}} Мой вопрос здесь, как я могу динамически создать соответствующий класс оплаты / объект и вызвать метод оплаты () от основного метода? Если я создаю объект условно, то я нарушение открытого закрытый принципа. Потому что, я проверяю тип оплаты с помощью If ... еще затем создать объект и вызвав платеж (), который, возможно, потребуется еще одна модификация.
Muhaimenul Islam
1

голосов
1

ответ
53

Просмотры

Попытка получить свойство не-объекта с помощью PHP OOPS концепции

Я пытаюсь получить данные из базы данных, используя OO-PHP Вот мой код user.php database.php публичную функцию запроса ($ SQL) {/ * $ результат = mysqli_query ($ this-> подключение, $ SQL); * / $ результат = $ этом-> connection-> запроса ($ SQL); $ This-> confirm_query ($ результат); вернуть $ результат; } $ index.php пользователей = User :: find_all_users (); Foreach ($ пользователей как $ пользователю) {эхо $ user-> имя пользователя; } При попытке извлечь пользователь из базы данных я получаю ошибку, пытаясь получить свойство необъектного
Sanam Rohit
1

голосов
0

ответ
34

Просмотры

Фабрика Узор: createABC против GetType (ABC)

Я пытаюсь написать код, который фильтрует список объектов на основе определенных свойств, которые они имеют. Есть много способов, чтобы фильтровать эти объекты, так что я могу иметь несколько фильтров. Я не уверен, если это имеет значение для этого вопроса, но эти классы фильтров имеют различные конструкторы. Для того, чтобы управлять созданием этих фильтров, я прочитал о шаблоне фабрики, и решил попробовать его. Там, кажется, две реализации, которые широко используются: Используя метод GetType, который использует например, операторы переключателей от типа, чтобы определить, какой объект строится. Создание индивидуальных методов для всех возможных объектов, которые могут быть созданы, например, createFilterA, createFilterB. Как я понимаю, преимущество методы (2): Это обеспечивает очень хорошую видимость того, что фильтры могут быть сделаны, так как мой IDE сразу говорит мне методы, доступные на заводе-изготовителе. В то время как способ (1) не делают типы фильтров, которые могут быть сделаны известно пользователю. Различные методы могут сказать мне, что аргументы, необходимые для построения различных фильтров. Преимущества метода (1) являются: У нас есть способ, чтобы отобразить строку конкретного типа фильтра, так что пользователи API не придется возиться с различными классами. Мне интересно, если я пропускаю на любые недостатки / преимущества в отношении каждого из этих двух реализаций? Я в настоящее время склоняюсь к гибридному, т.е. имеющим как методам GetType и createFilterX, где метод GetType выключатели и называют индивидуальный createFilterA, методы createFilterB. У нас есть способ, чтобы отобразить строку конкретного типа фильтра, так что пользователи API не придется возиться с различными классами. Мне интересно, если я пропускаю на любые недостатки / преимущества в отношении каждого из этих двух реализаций? Я в настоящее время склоняюсь к гибридному, т.е. имеющим как методам GetType и createFilterX, где метод GetType выключатели и называют индивидуальный createFilterA, методы createFilterB. У нас есть способ, чтобы отобразить строку конкретного типа фильтра, так что пользователи API не придется возиться с различными классами. Мне интересно, если я пропускаю на любые недостатки / преимущества в отношении каждого из этих двух реализаций? Я в настоящее время склоняюсь к гибридному, т.е. имеющим как методам GetType и createFilterX, где метод GetType выключатели и называют индивидуальный createFilterA, методы createFilterB.
bchen
1

голосов
1

ответ
43

Просмотры

How can I turn on the auto matching when invoking the template explicit instantiation?

I have two template class, and the Leaf is derived from the Base, then I developed a template function which uses the reference of the Base as its parameter. And set the definition and the instantiation of that function in its source file. The issue happened once I tried to pass the Leaf as the argument of that function. The compiler tries to find the symbol with Leaf without the auto convention as it used to be. // foo.h #ifndef __FOO_H_INCLUDED__ #define __FOO_H_INCLUDED__ #include template void Foo(T &value); #endif // __FOO_H_INCLUDED__ // foo.cpp #include #include template void Foo(T &value) { std::cout
Calvin
1

голосов
2

ответ
73

Просмотры

Java: Если иногда используемые объекты будут включены в качестве члена класса?

У меня есть класс CodeText, как показано ниже: общественный класс CodeText {частный символьный типа; частное ИНТ textCode; // Другие члены} Иногда, если есть ошибка, когда объект Symbol относится к объекту CodeText, мне нужно «запись», что символ, так что CodeText «знает», который имеет в виду, когда происходит ошибка. В настоящее время я добавил еще один член «relatedSymbol» в классе CodeText, как показано ниже, но он чувствует, как уродливый дизайн. общественный класс CodeText {частный символьный типа; частное ИНТ textCode; частный символ relatedSymbol; // Другие члены} Я не уверен, если выше, может быть улучшена. Любые предложения приветствуются. Изменить: Извините, что я не предоставил достаточно справочной информации. Моя цель состоит в том, как показано ниже: Для класса CodeText значение textCode регулируется в зависимости от типа. Например, если тип «Я» (Что означает немедленное), то textCode остается неизменным; Если тип «Е» (то есть внешний), то textCode должен быть пересчитан, а затем ссылаться на адрес внешнего символа. Но иногда, значение textCode может быть неправильным. Например, если тип «Е», но значение точек textCode на нелегальный символ, то эта ошибка должна быть записана и объект CodeText должен «знать», что Symbol он пытается передать.
CodingNow
1

голосов
1

ответ
114

Просмотры

Почему часто Laravel 5 использует method_exists вместо абстрактных методов?

FYI: Я использую Laravel 5.5 Один из примера: когда вы делаете: PHP мастеровых марка: запрашивать TestRequest ремесленник создает класс TestRequest, который простирается от класса СформироватьЗапрос и сгенерированных 2 способами: правила () и разрешить () Давайте посмотрим на passesAuthorization () метод в классе СформироватьЗапрос: защищенная функция passesAuthorization () {если (method_exists ($ это, 'авторизовать')) {вернуть $ this-> container-> вызов ([$ это 'авторизовать']); } Вернуться ложным; } Для меня это странное поведение: я бы СформироватьЗапрос в качестве абстрактного класса и хотел бы добавить 2 абстрактные методы: правила () и разрешить () и после того, как в TestRequest я бы их реализовать. Может кто-то пожалуйста, объясните, почему здесь такое поведение?
Aleksandrs
1

голосов
0

ответ
30

Просмотры

Нерест / инстанцирования снарядов в играх: организация агрегации / композиции / объединении

Я пытаюсь организованной хорошей моделью ОО для игры (записывается в C # / XNA), но не уверен в «лучший» способ борьбы с игроками, снарядами, врагов и окружающей среды. Основные классы, вовлеченные будут: уровень игрока, tilemap, враг, снаряд. Какие из перечисленных ниже будет, в общем, самый лучший вариант? Класс «уровня» с «игроком» объектом «tilemap» объекта и списками объектов «снаряд» и объекты «противник», сохраняя право собственности на данные снарядов и итерацию по списку снаряда для проверки столкновения. Список «метательных» объектов в базовом классе «игроком» и классов «противника». Эти списки могут быть итерация в классе «уровень». В этом случае я считаю, что мертвые игроки и враги могут» т быть разрушен, пока их списки метательные не пустуют. Вариант 1 в состав снарядов в уровне имеет смысл для меня, и мой текущий рабочий метод: когда игрок стреляет, устанавливается флаг и снарядом они открыли огонь записывается. Этот флаг проверяется в классе уровня и снаряд добавляется в список. Кроме того, в случае варианта 1, что является недостатком составления списка снаряда общественности совместно, поэтому он может быть легко добавлен? Спасибо. что является недостатком составления списка снаряда общественности совместно, поэтому он может быть легко добавлен? Спасибо. что является недостатком составления списка снаряда общественности совместно, поэтому он может быть легко добавлен? Спасибо.
sm284614
1

голосов
3

ответ
39

Просмотры

Это лучшая практика, чтобы избежать «я» экземпляры?

Если бы я реализовать класс, например: класс LinkedList: Защиту __init __ (Я): self.head = размер None четкости (Я): self.count = 0 self.current = self.head в то время как self.current = None : self.current = self.current.get_next () self.count + 1 = возврат self.count метод размера будет работать прекрасно без использования себя. для подсчета и текущих переменных, поэтому мне было интересно: почему это так, что рассчитывать и текущую работу с и без самостоятельного, в то время как self.head не будет работать без него.? Является ли это вообще плохая практика, чтобы использовать себя. в тех случаях, когда это не является обязательным?
user9352220
1

голосов
1

ответ
35

Просмотры

Как создать пользовательский двойной цикл в JS

Так что на данный момент я пытаюсь создать яваскрипт приложения, которое использует довольно много вложенные циклы для например. для (вар я = 0; я <а, я ++) {для (вар J = 0, J <б; j ++) {// код для запуска}} Так ради опрятности я думал, что я мог бы сделать какой-то функции для этой цели, которые могут быть призваны как этот doubleLoop (conditionA, conditionB) {// Код для выполнения} Является ли это вообще возможно в Javascript или я просто хочу иметь, чтобы сделать с нагрузками двойной для петель?
ScapeGoat
1

голосов
0

ответ
30

Просмотры

Instatiate class in a global variable

Я пытаюсь создать экземпляр класса пользователя в глобальной переменной, так что я не должен делать это в каждом методе я хочу, чтобы вернуть данные пользователя. класс showMore {пользователь общественности $; общественная функция __construct () {$ this-> пользователь = новый пользователь; $ This-> пользователь = $ this-> user-> где ( 'ID', Auth :: идентификатор ()) -> firstOrfail (); } Публичной функция индекс () {вид возврата ( 'student.app.index', [ 'пользователь' => $ этом-> пользователь]); }} Вместо этого класса showMore {общественности $ пользователя; общественная функция __construct () {$ this-> пользователь = новый пользователь; $ This-> пользователь = $ this-> user-> где ( 'ID', Auth :: идентификатор ()) -> firstOrfail (); } Индекс общественной функции () {$ пользователь = новый пользователь; $ Пользователь = $ user-> где ( 'ID', Auth :: идентификатор ()) -> fistOrFail (); вернуться вид ( 'student.app.index', [ 'пользователь' => $ пользователя]); } Общественная функция indexMore () {$ пользователь = новый пользователь; $ Пользователь = $ user-> где ( 'ID', Auth :: идентификатор ()) -> fistOrFail (); вернуться вид ( 'student.app.index', [ 'пользователь' => $ пользователя]); }} Как я могу идти о том, чтобы правильное изменение?
M'Baku
1

голосов
0

ответ
111

Просмотры

самостоятельное хранение объекта в Python

У меня есть класс в Python. класс MyClass: Защита бар (): # делать вещи, которые мне нужно реализовать некоторый механизм для хранения / кэша-части результатов функции, используя некоторые магазин () / нагрузки () функцию. Я вынужден использовать внешний объект, somewriter который предлагает API для создания объектов с помощью упорного чтения () / записи (). Вы можете себе это библиотекой пользовательского травления. класс MyClass: Защита бар (): # делать вещи, которые стоят проигрышей времени self.results = Баз Часть хранения идет хорошо, я могу хранить результаты DEF магазина (somewriter): somewriter.write (сам) Тем не менее, погрузку следующий способ не работает. Как реализовать механизм кэширования для объекта. Защита нагрузка (somewriter): сам = somewriter.read ()
00__00__00
1

голосов
0

ответ
34

Просмотры

переопределение или переопределение metaestimators в sklearn?

Я пишу на заказ sklearn трубопровода. Мне нужно, чтобы иметь возможность обрабатывать панда dataframes. Если я создаю собственные трансформаторы и оценщики путем создания дочерних классов встроенных BaseEstimator, ClassifierMixin, TransformerMixin все эти классы автоматически приводить к dataframes numpy.ndarray во время посадки / функции преобразования, когда _check_X_y называется точно. Я знаю о существовании https://github.com/scikit-learn-contrib/sklearn-pandas, однако в зависимости от неустойчивых связываний между двумя неустойчивыми библиотеками не вариант. Поэтому я реализовал свои оценщик не наследуя ничего от BaseEstimator, ClassifierMixin, TransformerMixin но только определения методов, запрашиваемых апите подгонку (), fit_transform (), преобразование () _ get_params (), _ set_params (). Мне кажется, это работает отлично, также в сочетании с GridSearchCV. Я могу просто преобразовать ФР в Numpy только при необходимости Моего вопроса: есть ли какая-либо причина, почему я не должен делать это? Должен ли я пропустить какие-либо скрытые требования sklearn API?
00__00__00
1

голосов
0

ответ
29

Просмотры

Sphinx Python: создать документацию, где питон скрипт импортирует модуль не установили

Можно ли создать документацию в Сфинксе (Python), где один из сценариев питона импортирует модуль (в данном случае питон-кронтабе (https://pypi.python.org/pypi/python-crontab)), что я дон «т установлен? от кронтаба импорта CRONTAB В основном я пишу документацию на машине Windows. Код работает отлично, но не на машине Windows, так как кронтаб только для Linux. Таким образом, мне было интересно, если есть способ в Сфинкса, чтобы сказать ему, что это не имеет значения, если он не может найти кронтаб
Euler_Salter
1

голосов
1

ответ
104

Просмотры

Возвратить выберите LINQ непосредственно или присвоить значение переменной перед тем [закрыт]

Какой из этого имеет смысл и более удобным для чтения? Возвратить выберите LINQ непосредственно или присвоить значение переменной раньше? общественные динамические имена (Список лиц) {выход вар = persons.Select (х => новый {Name = x.Name, Age = x.Age}) ToList (). вернуть выход; } Или это? общественные динамические имена (Список лиц) {вернуться persons.Select (х => новый {Name = x.Name, Age = x.Age}) ToList (). }
psvieira.ti
1

голосов
0

ответ
54

Просмотры

Индивидуальная информация в DTO для вошедшего в систему пользователя

Мой контроллер возвращает DTO в объект Movie общественного класса Movie {частный титул конечной строки; частный последний тип MovieType; частные конечные языки Список; частные страны окончательного списка; ...} Это стандартный объект фильма я возвращаюсь после вызова / кино / {ID}. Тем не менее, я хотел бы вернуть рейтинг зарегистрированного пользователя вместе с этим видео. Как и в случае с, например, другими услугами, такими как IMDB. При входе на сайт фильма, это только общий рейтинг, но если войти в свою учетную запись и оценить видео, ваш рейтинг будет дан на странице видео. Так я думал, чтобы добавить к DTO Movie объекта в поле yourRating где рейтинг будет дан, если вы вошли в систему и оценили видео. Это будет выглядеть следующим образом общественного класса Movie {частного название конечной строка; частный последний тип MovieType; частные конечные языки Список; частные страны окончательного списка; частный окончательный Float yourRating; \\ Twoja Рейтинг клиентов ...} Я создал нить об этом на SO, и пользователь там предложил создать новый объект UserMovie унаследованный от фильма и имеющего только одно дополнительное поле в yourRating. Я хотел бы спросить вас, если это то, как он должен выглядеть, что пользователь форума / кино / {идентификатор} возвращает DTO фильм, и в настоящее время вошли DTO UserMovie объект (наследует все поля Movie + yourRating поле). Нужно отделить таким образом отдельные данные для зарегистрированного пользователя. } Я создал нить об этом на SO, и пользователь там предложил создать новый объект UserMovie унаследованный от фильма и имеющего только одно дополнительное поле в yourRating. Я хотел бы спросить вас, если это то, как он должен выглядеть, что пользователь форума / кино / {идентификатор} возвращает DTO фильм, и в настоящее время вошли DTO UserMovie объект (наследует все поля Movie + yourRating поле). Нужно отделить таким образом отдельные данные для зарегистрированного пользователя. } Я создал нить об этом на SO, и пользователь там предложил создать новый объект UserMovie унаследованный от фильма и имеющего только одно дополнительное поле в yourRating. Я хотел бы спросить вас, если это то, как он должен выглядеть, что пользователь форума / кино / {идентификатор} возвращает DTO фильм, и в настоящее время вошли DTO UserMovie объект (наследует все поля Movie + yourRating поле). Нужно отделить таким образом отдельные данные для зарегистрированного пользователя.
Super_Koks
1

голосов
0

ответ
103

Просмотры

Can not access a subclass method from a superclass

Я занимался объектно-ориентированным программированием домашнего задания и я застрял где-то. Мы были в основном сказали сделать телефонную книгу. Он имеет класс PhoneNumber, который расширяет класс ContactInfo. Существует также класс PhoneBookEntry, который содержит ArrayList из ContactInfo objects.In класс PhoneBookEntry там должен быть метод, называемый displayPhoneNumbers (). И домашнее задание говорит: displayPhoneNumbers (): Печатает все номера телефонов в contactInfos. Ну, чтобы отобразить номер телефона, я должен быть в состоянии получить доступ к объекту PhoneNumber, но все, что я имею в классе PhoneBookEntry список объектов CONTACTINFO, которые не могут иметь номер телефона в нем. общественного класса PhoneBookEntry {частное имя строки; ArrayList contactInfos; общественного PhoneBookEntry () {contactInfos = новый ArrayList (); } общественного недействительными displayPhoneNumbers () {для (INT I = 0;
Mertcan Seğmen
1

голосов
1

ответ
60

Просмотры

Почему я не могу создать метод по умолчанию в интерфейсе?

Я просто новичок, и изучение интерфейсов. Я пытался читать некоторые вопросы здесь, прежде чем отправлять это. Но мне кажется, что это слишком сложно для меня. И они говорят о методах объекта по умолчанию. В моем случае, я пытаюсь создать метод по умолчанию в интерфейсе, но я получаю эту ошибку: «ошибка синтаксиса на лексемы„по умолчанию“, удалите этот маркер» Вот мой код: пакет bankaccountapp; открытый интерфейс IBaseRate {// Создать метод, который возвращает двойную getBaseRate базовой ставки по умолчанию () {вернуться 2.5; }}
Nasserr
1

голосов
2

ответ
63

Просмотры

В Java, делает тему продолжать идти, даже если ничего не может получить к нему доступ?

Таким образом, у вас есть класс ExampleThread Java, который расширяет тему. Для того, чтобы этот пример просто, скажем, что его метод Run () просто спать () s в течение 10 секунд, а затем печатает «Hello World» на экране. Тем не менее, он будет создаваться следующим образом: общественная пустота startThread () {// Создать локальную переменную ExampleThread пример = новый ExampleThread (); example.start (); } Если мы называем этот метод, а затем основной поток продолжает делать другие вещи, будет Hello World получить печатный или нет? Большинство объектов Java перестают существовать не в момент ничто не может ссылаться на них (и ничто не может ссылаться на «например», видя, как это было локальным переменным). Являются ли бегущие нити разные? Извините, если это уже было предложено, я не мог найти ничего об этом.
ewokonfire
1

голосов
1

ответ
51

Просмотры

If I have a function that should have conditional behavior, what's the best way to do it?

Предположим, у меня есть нейронную сеть. Я могу выполнить несколько операций в ней, например, так: Защиту one_iteration (my_op, данные, ...): для I в пределах (...): ... my_op (данные) ... Представьте себе, что для петли делать немного больше, чем просто для цикла, и это, как я итерацию по коллекции объектов. Теперь, если пройти как my_op функцию обучения, я установить. Но, если я хочу, чтобы передать функцию оценки как my_op, теперь я хочу, чтобы мои промежуточные результаты, чтобы знать, как я делаю. Так что я хотел бы сделать: Защиту one_iteration (my_op, данные, ...): результаты = [] для я в диапазоне (...): ... результат = my_op (данные) results.append (результат) результаты возвращаемые И я будет иметь список / массив с результатами для меня, чтобы оценить, как эта сеть выполняется по этой итерации. Теперь предположим, что я хочу my_op быть проверки, а также для того, Мне нужно еще больше промежуточной информации. Я мог бы, возможно, сделать что-то вроде этого: четкости one_iteration (my_op, данных is_validation, ...): результаты = [], если is_validation: more_results = [] для я в диапазоне (...): ... результат, other_result = my_op (данные) results.append (результат), если is_validation: результаты more_results.append (other_result) возвратных Но, он начинает получать все виды грязные в этой точке. Я знаю, что я мог бы реализовать отдельный поезд, оценки и проверки метода, и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объект (в данном случае, для цикла), и поэтому, если я изменить то, как я итерацию, я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? Я мог бы, возможно, сделать что-то вроде этого: четкости one_iteration (my_op, данных is_validation, ...): результаты = [], если is_validation: more_results = [] для я в диапазоне (...): ... результат, other_result = my_op (данные) results.append (результат), если is_validation: результаты more_results.append (other_result) возвратных Но, он начинает получать все виды грязные в этой точке. Я знаю, что я мог бы реализовать отдельный поезд, оценки и проверки метода, и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объект (в данном случае, для цикла), и поэтому, если я изменить то, как я итерацию, я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? Я мог бы, возможно, сделать что-то вроде этого: четкости one_iteration (my_op, данных is_validation, ...): результаты = [], если is_validation: more_results = [] для я в диапазоне (...): ... результат, other_result = my_op (данные) results.append (результат), если is_validation: результаты more_results.append (other_result) возвратных Но, он начинает получать все виды грязные в этой точке. Я знаю, что я мог бы реализовать отдельный поезд, оценки и проверки метода, и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объект (в данном случае, для цикла), и поэтому, если я изменить то, как я итерацию, я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? is_validation, ...): Результаты = [], если is_validation: more_results = [] для я в диапазоне (...): ... результат, other_result = my_op (данные) results.append (результат), если is_validation: more_results. добавить результаты (other_result) возвратных Но, он начинает получать все виды грязные в этой точке. Я знаю, что я мог бы реализовать отдельный поезд, оценки и проверки метода, и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объект (в данном случае, для цикла), и поэтому, если я изменить то, как я итерацию, я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? is_validation, ...): Результаты = [], если is_validation: more_results = [] для я в диапазоне (...): ... результат, other_result = my_op (данные) results.append (результат), если is_validation: more_results. добавить результаты (other_result) возвратных Но, он начинает получать все виды грязные в этой точке. Я знаю, что я мог бы реализовать отдельный поезд, оценки и проверки метода, и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объект (в данном случае, для цикла), и поэтому, если я изменить то, как я итерацию, я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? other_result = my_op (данные) results.append (результат), если is_validation: результаты more_results.append (other_result) возвратных Но, он начинает получать все виды грязные в этой точке. Я знаю, что я мог бы реализовать отдельный поезд, оценки и проверки метода, и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объект (в данном случае, для цикла), и поэтому, если я изменить то, как я итерацию, я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? other_result = my_op (данные) results.append (результат), если is_validation: результаты more_results.append (other_result) возвратных Но, он начинает получать все виды грязные в этой точке. Я знаю, что я мог бы реализовать отдельный поезд, оценки и проверки метода, и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объект (в данном случае, для цикла), и поэтому, если я изменить то, как я итерацию, я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объекта (в данном случае петля для), и поэтому, если я изменить то, как я итерацию, Я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует? и в каждой из них, я мог бы сделать то, что необходимо, но проблема, которую я вижу в том, что каждый метод будет повторять, как он перебирает объекта (в данном случае петля для), и поэтому, если я изменить то, как я итерацию, Я должен изменить его в 3-х разных местах. Есть ли шаблон дизайна я здесь отсутствует?
baka
1

голосов
0

ответ
128

Просмотры

Джанго, как назвать __init__ в абстрактной модели?

и несколько моделей, которые унаследовали от него @ python_2_unicode_compatible класса SomeModel (BaseModel): пройти Но когда я пытаюсь makemigrations, я получаю сообщение о том, что никаких изменений не обнаружено. Что я делаю неправильно? Почему метод INOR не вызывается?
Narnik Gamarnik
1

голосов
0

ответ
173

Просмотры

Объектно-ориентированный Tkinter, лучший способ общения между виджетами в графическом интерфейсе с большим количеством кадров

Я пытаюсь выяснить, что лучший способ общения между различными виджетов, где виджеты пользовательские классы, наследующие от Tkinter виджетов и у меня есть несколько кадров, присутствующих (чтобы помочь с управлением макета). Рассмотрим, например, следующий простой графический интерфейс (написанный на Python 3, изменение Tkinter в Tkinter для питона 2): от Tkinter импорта Frame, Button, GUI Tk класса (Frame): четкости __init __ (самости, корень): Рама .__ INIT __ (самостоятельно, корень) self.upper_frame = Рама (корень) self.upper_frame.pack () = self.lower_frame Рама (корень) self.lower_frame.pack () self.upper_btn1 = кнопка (self.upper_frame, текст = "верхняя кнопка 1") self.upper_btn2 = кнопка (self.upper_frame, текст = "верхняя кнопка 2") self.upper_btn1.grid (строка = 0, столбец = 0) self.upper_btn2.grid (строка = 0, столбец = 1) self.lower_btn = CustomButton (self.lower_frame, "нижняя кнопка 3") self.lower_btn.pack () класс CustomButton (кнопка): Защита __init __ (я, мастер, текст): Кнопка .__ INIT __ (я, мастер , текст = текст) self.configure (команда = self.onClick) Защита OnClick (Я): печать ( "здесь я хочу, чтобы изменить текст верхней кнопки 1") корень = Tk) my_gui = GUI (корень) корень (. MainLoop () причина я положил их в разных, потому что я хочу использовать различные менеджеры компоновки в двух разных, чтобы создать более сложную схему. Тем не менее, я хочу команду в lower_btn изменить свойство, например upper_btn1. Тем не менее, я не могу сразу получить доступ к upper_btn1 из экземпляра lower_btn настроенного класса CustomButton. Родитель lower_btn является frame2, и frame2, родитель корень (не графический интерфейс экземпляра). Если изменить родительский lower_btn к GUI, например, т.е. self.lower_btn = CustomButton ( «нижняя кнопка» самостоятельно,) он не будет помещен правильно при использовании пакета (). Если изменить родительский Frame1 / frame2 к GUI, например, т.е. self.upper_frame = кадр (сам) self.upper_frame.pack () self.lower_frame = рамы (сам) self.lower_frame.pack () Я мог бы в принципе доступа upper_btn1 от lower_btn по self.master.master.upper_btn1, НО тогда frame1 / frame2 не правильно установлены с помощью пакета () (это я не понимаю, почему). Я могу, конечно, передать GUI экземпляр в качестве отдельной переменной, на вершине мастера, чтобы CustomButton, то есть что-то вроде класса CustomButton (кнопка): четкости __init __ (я, мастер, окна, текст): Кнопка .__ инициализации __ (самости, мастер, текст = текст) самостоятельно. окно = окно self.configure (команда = self.onClick) Защита OnClick (Я): self.window.upper_btn1.configure (текст = "новый текст"), а затем изменить конструкцию lower_btn к self.lower_btn = CustomButton (я. lower_frame, самость, «нижняя кнопка 3»), но в том, что «правильный» способ сделать это? Итак, что это лучший способ реорганизовать графический интерфейс? Должен ли я передать GUI как отдельная переменная в верхней части главного / родительского аргумента? Должен ли я изменить мастер / родитель кнопок и / или кадров (и как-то исправить проблемы с управлением макетом)? Или я должен сделать команды кнопок в качестве методов экземпляра GUI, чтобы они могли взаимодействовать с виджетами в этом графическом интерфейсе, хотя это на самом деле не чувствует, как объектно-ориентированное программирование? Я могу' т показаться, чтобы найти ориентированный дизайн рабочего объекта, который чувствует себя «правильно». Кроме того, объяснение, почему упаковка () не работает для frame1 / frame2 если я экземпляр GUI (само) мастера, также будут оценены, как это было бы мое интуитивное, наиболее объектно-ориентированный подход. Edit: Может быть, лучший способ, чтобы не использовать кадры внутри кадров на всех, и использовать только сетку (), а затем использовать Colspan / RowSpan дать управление компоновкой большую гибкость.
Jonathan Lindgren
1

голосов
1

ответ
41

Просмотры

Динамически созданный объект не заселены, как и ожидалось

Я пытаюсь извлечь данные из одного объекта, изменения структуры и создать новую. Упрощенный пример для исходного объекта вар Рез = [{DateTime: '00: 00' , Номер: 1, WeekDay: 1}, {DateTime: '00: 00' , номер: 4, WeekDay: 1}, {DateTime: ' 00:00' номер: 1, WeekDay: 2}, {DateTime: '00: 30' , номер: 1, WeekDay: 2}] Отсюда я хочу создать новый объект, где "номер" суммируется на 1. WEEKDAY 2. Половина часового интервала вар интервалы = ['00: 00' , '00: 30' ] = вар будням [1, 2] целевая переменная = [] вар intervalObj = []; для (I = 0; г <intervals.length; я ++) {{intervalObj.push (интервал: интервалы [I], номер: 0})} для (я = 0; я <weekdays.length; я ++) {вар день = + 1; target.push ({день: день, данные: intervalObj,})}, а затем заполнить новый объект так: для (вар строки в Res) {вар Dt = Рез [строка] .DateTime; вар = WD разреш [строка] .WeekDay; вар wdidx = weekdays.indexOf (WD) вар dtidx = intervals.indexOf (дт) вар Num = разреш [строка] .Number; цель [wdidx] .data [dtidx] .number + = Num; } Это не работает при создании целевого объекта, как выше. В суммированные результаты получает повторяется для того же интервала в течение всех дней недели. Однако, когда объект статически: целевая переменная = [{день: 1, данные: [{интервал: '00: 00' , номер: 0}, {интервал: '00: 30' , номер: 0}]}, { день: 2, данные: [{интервал: '00: 00' , номер: 0}, {интервал: '00: 30' , номер: 0}]}] Это работает, как ожидалось. Я не могу понять, почему. Вот скрипка пример: https:
oceansmoving
1

голосов
1

ответ
54

Просмотры

Interface inheritance and return data type as a subclass

Problem I'm thinking how to design an interface hierarchy in my Java app to meet my needs. I need to extend my service interface and return more detailed dto-s. Contracts I have this interface to define a datatype of a service: public interface IEnvelopeService { T findActiveEnvelope(UUID envelopeId); // the rest is omitted for brevity } it works as I need. But in one usecase I need to "enrich" the datatype EnveloptDto by another information, so I created an enriched service implementation to return these enriched dto-s. New interface extending previous contract to define a new datatype: public interface IRichEnvelopeService extends IEnvelopeService { } and that's an example implementation: public class RichEnvelopeService implements IRichEnvelopeService { EnvelopeRichDto findActiveEnvelope(UUID envelopeId){ //.... } } DTO Main, parent, DTO: public class EnvelopeDto{ // ommited... } and extended DTO: public class EnvelopeRichDto extends EnvelopeDto{ // ommited... } Question Is this what I proposed good way how to achieve my needs? Is there something what can be done better and what violate OOP principles in Java?
Artegon
1

голосов
1

ответ
57

Просмотры

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

Скажем, я пытался представить фигур прямоугольник и овал, с гибкостью, чтобы в конечном счете добавить больше форм. Поэтому я пишу абстрактный класс AShape. В этом абстрактном классе, я также хочу, чтобы абстрактные поля сеттеров, такие как цвет, ширину, высоту и положение. Моя первая мысль сделать шаблон строитель, но я знаю, что один должен создать экземпляр класса для того, чтобы иметь возможность использовать строитель, и вы не можете создать экземпляр абстрактного класса. Это означает, что я должен сделать это в конкретных классах, но это дублируется код. Есть еще один шаблон, который я могу использовать, или есть способ, которым я могу обойти это?
Dorothy
1

голосов
1

ответ
18

Просмотры

Лучший способ для разработки этого локуса класса [закрыт]

Контекст: Привет всем, кто смотрит на этот вопрос. Я начала питон кодировщик (2 недели идет сильный!), И я полагаю, что я изначально проектируются мои классы плохо, и я с просьбой о помощи на хороший способ изменить дизайн основополагающий один (в Locus.py). Справочная информация: Проект имеет 4 класса до сих пор, которые можно найти здесь (https://github.com/asriley/HalfSiblings). Очень базовый класс Локус имеет кортеж представлять собой аллель генетических данных (а, б). Следующий класс, Индивидуальный имеет список аллелей: [(а, б), (в, г), (а, е), (F, D)]. В целом, однако, мы имеем п лиц и л локусы для каждого человека. Образец данные: 7 особей (строки) с 3 локусами (смещ_по_столбцы) 1,1 5,3 4,3 1,2 4,7 3,7 2,3 3,6 5,4 2,4 7,4 4,9 3,6 8,9 3,0 6,5 4,8 0,0 7,7 7,7 7, 9 Я пытаюсь выяснить, как проектировать этот класс, чтобы включить его в других классах (особенно индивидуальные), потому что в конце концов я должен использовать NetworkX для построения графиков на данных. Полный фрагмент код класса Локуса и текущей ошибка Дан: класс Locus: # конструктора Защиту __init __ (Я): self.alleles = () Защита get_alleles (Я): возвращение self._alleles Защиты set_alleles (я, х, у) : если х и у: self._alleles = (х, у) = аллели свойство (get_alleles, set_alleles) l1 = Локус () l1.set_alleles (1,2) l1.set_alleles (2,3) печать (l1.get_alleles ( )) Traceback (самый последний вызов последнего): Файл "Locus.py", строка 13, в l1 = Локус () Файл "Locus.py", строка 4, в __init__ self.alleles = () Ошибка типа: set_alleles () отсутствует 1 требуется позиционная аргумент: «у» Может кто-нибудь помочь с тем, как я должен правильно обращаться с этим классом? Разбор файла производится в одном из других классов из ссылки GitHub. Так вот не вопрос здесь. В конце концов, я хочу, чтобы отправить 2D список лиц (содержащий генетическую информацию Локус) к другим классам.
noc_coder
1

голосов
1

ответ
34

Просмотры

добавить информацию в класс с каждым признаком или ребенком

Допустим, у меня есть класс, который содержит класс массив A {защищенный список $ = [1]; } Затем я хочу, чтобы добавить информацию в случаи с помощью признаков или проходящих классов. черта B {защищенный список $ = [2, 3]; } Класс С расширяет {защищенный $ список = [4]; } Тогда, если я построить что-то вроде этого $ D = новый класс расширяет C {использование B; защищенный $ список = [5]; } Я должен был бы список, чтобы быть [1, 2, 3, 4, 5] вместо [5]. Очевидно, что это не путь, я просто использовал его, чтобы проиллюстрировать то, что мне нужно сделать. Проблема заключается в том, что я не знаю, как много общих черт или наследует будет, так как я проектирование только родительский класса. Я получил соблазн использовать конструктор, но если есть несколько черт становится уродливым очень быстро.
php_nub_qq
1

голосов
2

ответ
53

Просмотры

Можно ли изменить метод определения великокняжеского родительского класса?

Я работал над определенной проблемой и нашел интересную проблему внутри. Поясню на примере (C # код) класс А публика: IA {защищенной абстрактная пустота Append (LoggingEvent loggingEvent) {// Некоторые определения}} общественного класса B: {защищены переопределения недействительного Append (LoggingEvent loggingEvent) {// определение переопределения }} MyClass общественного класса: B {// Здесь я хочу изменить определение метода Append. } Класс A и B имеет определенную библиотеку и у меня нет никакого контроля, чтобы изменить эти классы.
Deepak
1

голосов
1

ответ
114

Просмотры

Helper struct to expose data member to public

так что я пытаюсь построить класс с вспомогательным методом, а именно: класс типа {Int а, б, в; друг автоматический помощник (авто); друг авто test_helper (авто); / * Пары тест с реализацией * / общественностью: недействительный метод () {помощник (это); }}; Но сделать Хелпер друг функцией паров тест с реализацией, если мы хотим, чтобы проверить помощник. Поэтому я хочу, чтобы Helper свободную функцию, а именно: автоматический помощник (Int &, Int &, Int &); авто test_helper (интермедиат &, Int &, Int &); Класс Тип {INT а, б, в; общественности: недействительным метод () {хелпер (а, б, в); }}; Это, однако, делает код намного более утомительно, когда элементы данных много. Итак, я пришел с идеей построить вспомогательную структуру, которая имеет точный элемент данных, как тип, но со всеми членами данных будучи общественностью, так что мы» будет иметь возможность просто передать в ручке такой HelperType, может быть что-то вроде: STRUCT HelperType {Int а, Ь, с; }; автоматический помощник (HelperType * а); авто test_helper (HelperType * а); аннулируются Тип :: Способ () {помощник (static_cast (это)); } Есть ли какие-либо элегантные подходы к разработке такой HelperType-структуру? Такой, как родовая обертка или, возможно, с наследованием?
Taylor Huang
1

голосов
2

ответ
45

Просмотры

Обеспечение неизменности [закрыт]

Мы все знакомы с неизменностью. Очень простой неизменны класс был бы конечный класс Неизменное {общественности окончательный поплавок PI = 3,14; } Является ли это действительно неизменны? Может разработчики Java действительно не в состоянии изменить PI? Нет, они могут использовать Reflection API для доступа и изменения PI. Однако, так как это неортодоксальный способ доступа поля, хотя модификация с помощью Reflection API может быть заблокирована с помощью диспетчера безопасности (верно?), Мы говорим, Неизменный неизменна даже если менеджер безопасности не активируются. Интерфейс ImmutableName {Строка общественного GetName (); } Класс MutableName реализует ImmutableName {частное имя String; Строка GetName общественности () {возвращение имя; } Общественной недействительная SetName (Строка Val) {имя = значение; }} Если у меня есть все экземпляры MutableName именуемых экземпляров ImmutableName, разработчики изменить имя. На самом деле, разработчики могут проверить реализацию выполнения экземпляра, то обратное приведение экземпляра в MutableName. Понижающее приведение является гораздо более распространенным в Java, чем Reflection API, но это не все еще некоторые неортодоксальные трюк? В случае, если код конструктора класса защищаясь против понижающего приведения?
Sgene9
1

голосов
0

ответ
111

Просмотры

Fragment: Bluetooth Service and Fragment Connection

I did debug on my project and my 3. fragment cant connect Bluetooth service. That include send message to other devices. My connection is starting 1st fragment my device id and device name should keep bluetooth service but i connect with below code my connection null and ConnectedThread return null object. So how can i connect bluetooth service java in my fragment again ? I am calling this line on my Fragment mBluetoothConnection = new BluetoothConnectionService(getActivity().getApplicationContext()); And write function in BluetoothService.java: button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { byte[] bytes = editText.getText().toString().getBytes(Charset.defaultCharset()); mBluetoothConnection.write(bytes); } }) My breakpoint on mBluetoothConnection.write(bytes); this line and every ConnectedThread, outputstream return null and why ? And this is my service: public class BluetoothConnectionService { private static final String TAG = "BluetoothConnectionServ"; private static final String appName = "MYAPP"; private static final UUID MY_UUID_INSECURE = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"); private final BluetoothAdapter mBluetoothAdapter; Context mContext; private AcceptThread mInsecureAcceptThread; private ConnectThread mConnectThread; private BluetoothDevice mmDevice; private UUID deviceUUID; ProgressDialog mProgressDialog; private ConnectedThread mConnectedThread; public BluetoothConnectionService(Context context) { mContext = context; mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); start(); } /** * This thread runs while listening for incoming connections. It behaves * like a server-side client. It runs until a connection is accepted * (or until cancelled). */ private class AcceptThread extends Thread { // The local server socket private final BluetoothServerSocket mmServerSocket; public AcceptThread(){ BluetoothServerSocket tmp = null; // Create a new listening server socket try{ tmp = mBluetoothAdapter.listenUsingInsecureRfcommWithServiceRecord(appName, MY_UUID_INSECURE); Log.d(TAG, "AcceptThread: Setting up Server using: " + MY_UUID_INSECURE); }catch (IOException e){ Log.e(TAG, "AcceptThread: IOException: " + e.getMessage() ); } mmServerSocket = tmp; } public void run(){ Log.d(TAG, "run: AcceptThread Running."); BluetoothSocket socket = null; try{ // This is a blocking call and will only return on a // successful connection or an exception Log.d(TAG, "run: RFCOM server socket start....."); if(socket == null) socket = mmServerSocket.accept(); Log.d(TAG, "run: RFCOM server socket accepted connection."); }catch (IOException e){ Log.e(TAG, "AcceptThread: IOException: " + e.getMessage() ); } //talk about this is in the 3rd if(socket != null){ Log.d(TAG, "run: Connected is active"); connected(socket,mmDevice); } Log.i(TAG, "END mAcceptThread "); } public void cancel() { Log.d(TAG, "cancel: Canceling AcceptThread."); try { mmServerSocket.close(); } catch (IOException e) { Log.e(TAG, "cancel: Close of AcceptThread ServerSocket failed. " + e.getMessage() ); } } } /** * This thread runs while attempting to make an outgoing connection * with a device. It runs straight through; the connection either * succeeds or fails. */ private class ConnectThread extends Thread { private BluetoothSocket mmSocket; public ConnectThread(BluetoothDevice device, UUID uuid) { Log.d(TAG, "ConnectThread: started."); mmDevice = device; deviceUUID = uuid; } public void run(){ BluetoothSocket tmp = null; Log.i(TAG, "RUN mConnectThread "); // Get a BluetoothSocket for a connection with the // given BluetoothDevice try { Log.d(TAG, "ConnectThread: Trying to create InsecureRfcommSocket using UUID: " +MY_UUID_INSECURE ); tmp = mmDevice.createRfcommSocketToServiceRecord(deviceUUID); } catch (IOException e) { Log.e(TAG, "ConnectThread: Could not create InsecureRfcommSocket " + e.getMessage()); } mmSocket = tmp; // Always cancel discovery because it will slow down a connection mBluetoothAdapter.cancelDiscovery(); // Make a connection to the BluetoothSocket try { // This is a blocking call and will only return on a // successful connection or an exception mmSocket.connect(); Log.d(TAG, "run: ConnectThread connected."); } catch (IOException e) { // Close the socket try { mmSocket.close(); Log.d(TAG, "run: Closed Socket."); } catch (IOException e1) { Log.e(TAG, "mConnectThread: run: Unable to close connection in socket " + e1.getMessage()); } Log.d(TAG, "run: ConnectThread: Could not connect to UUID: " + MY_UUID_INSECURE ); } //will talk about this in the 3rd video connected(mmSocket,mmDevice); } public void cancel() { try { Log.d(TAG, "cancel: Closing Client Socket."); mmSocket.close(); } catch (IOException e) { Log.e(TAG, "cancel: close() of mmSocket in Connectthread failed. " + e.getMessage()); } } } /** * Start the chat service. Specifically start AcceptThread to begin a * session in listening (server) mode. Called by the Activity onResume() */ public synchronized void start() { Log.d(TAG, "start"); // Cancel any thread attempting to make a connection if (mConnectThread != null) { mConnectThread.cancel(); mConnectThread = null; } if (mInsecureAcceptThread == null) { mInsecureAcceptThread = new AcceptThread(); mInsecureAcceptThread.start(); } } /** AcceptThread starts and sits waiting for a connection. Then ConnectThread starts and attempts to make a connection with the other devices AcceptThread. **/ public void startClient(BluetoothDevice device,UUID uuid){ Log.d(TAG, "startClient: Started."); //initprogress dialog mProgressDialog = ProgressDialog.show(mContext,"Connecting Bluetooth" ,"Please Wait...",true); mConnectThread = new ConnectThread(device, uuid); mConnectThread.start(); } /** Finally the ConnectedThread which is responsible for maintaining the BTConnection, Sending the data, and receiving incoming data through input/output streams respectively. **/ private class ConnectedThread extends Thread { private final BluetoothSocket mmSocket; private final InputStream mmInStream; private final OutputStream mmOutStream; public ConnectedThread(BluetoothSocket socket) { Log.d(TAG, "ConnectedThread: Starting."); mmSocket = socket; InputStream tmpIn = null; OutputStream tmpOut = null; //dismiss the progressdialog when connection is established try{ mProgressDialog.dismiss(); }catch (NullPointerException e){ e.printStackTrace(); } try { tmpIn = mmSocket.getInputStream(); tmpOut = mmSocket.getOutputStream(); } catch (IOException e) { e.printStackTrace(); } mmInStream = tmpIn; mmOutStream = tmpOut; } public void run(){ byte[] buffer = new byte[1024]; // buffer store for the stream int bytes; // bytes returned from read() // Keep listening to the InputStream until an exception occurs while (true) { // Read from the InputStream try { bytes = mmInStream.read(buffer); String incomingMessage = new String(buffer, 0, bytes); Log.d(TAG, "InputStream: " + incomingMessage); Intent incomingMessageIntent = new Intent("incomingMessage"); incomingMessageIntent.putExtra("theMessage", incomingMessage); LocalBroadcastManager.getInstance(mContext).sendBroadcast(incomingMessageIntent); } catch (IOException e) { Log.e(TAG, "write: Error reading Input Stream. " + e.getMessage() ); break; } } } //Call this from the main activity to send data to the remote device public void write(byte[] bytes) { String text = new String(bytes, Charset.defaultCharset()); Log.d(TAG, "write: Writing to outputstream: " + text); try { mmOutStream.write(bytes); } catch (IOException e) { Log.e(TAG, "write: Error writing to output stream. " + e.getMessage() ); } } /* Call this from the main activity to shutdown the connection */ public void cancel() { try { mmSocket.close(); } catch (IOException e) { } } } private void connected(BluetoothSocket mmSocket, BluetoothDevice mmDevice) { Log.d(TAG, "connected: Starting."); // Start the thread to manage the connection and perform transmissions mConnectedThread = new ConnectedThread(mmSocket); mConnectedThread.start(); } /** * Write to the ConnectedThread in an unsynchronized manner * * @param out The bytes to write * @see ConnectedThread#write(byte[]) */ public void write(byte[] out) { // Create temporary object ConnectedThread r; if(mConnectedThread==null){ return; } // Synchronize a copy of the ConnectedThread Log.d(TAG, "write: Write Called."); //perform the write mConnectedThread.write(out); } } ;
CKocar
1

голосов
4

ответ
98

Просмотры

Получение запуска ввода времени в абстрактном классе в Java

Постановка задачи «Разработка программы Java для создания абстрактного класса с именем Shape, который содержит два целых числа и пустой метод с именем printArea (). Предоставлять три класса с именем прямоугольник, треугольник и круг таким образом, что каждый из классов расширяет класс Shape. Каждый из классов содержит только метод printArea (), который печатает область заданной формы «. В этой программе, я хочу, чтобы получить два целочисленных значений, содержащихся в абстрактном классе Shape, от пользователя (время выполнения), а не время компиляции. Это мой код абстрактного класса Shape {аннотация аннулируется Printarea (); Int А = 10, B = 2 ;; } Класс Прямоугольник простирается Shape {пустота Printarea () {System.out.println ( "Площадь прямоугольника равна" + (а * б)); }} Класс треугольник расширяет Shape {аннулируются Printarea () {System.out.println ( "Площадь треугольника равна" + (0,5 * а * б)); }} Класс Circle расширяет Shape {пустота Printarea () {System.out.println ( "площадь круга" + (3.14 * а * а)); }} Класс Основное {государственной статической силы основных (String [] арг) {Форма = Ь; б = новый круг (); b.Printarea (); б = новый прямоугольник (); b.Printarea (); б = новый треугольник (); b.Printarea (); }} }} Класс Основное {государственной статической силы основных (String [] арг) {Форма = Ь; б = новый круг (); b.Printarea (); б = новый прямоугольник (); b.Printarea (); б = новый треугольник (); b.Printarea (); }} }} Класс Основное {государственной статической силы основных (String [] арг) {Форма = Ь; б = новый круг (); b.Printarea (); б = новый прямоугольник (); b.Printarea (); б = новый треугольник (); b.Printarea (); }}
Kɩsʜʌŋ
1

голосов
0

ответ
69

Просмотры

Конструктор Функция против Object.create - В чем разница и приложения?

Приходя на Java, я пытаюсь правильно понять Javascript ООП. Я читал об этом, но не интуитивно понимал разницу и применение двух методов создания объектов и наследования. Object.create Как я понимаю: Object.create () устанавливает прототип данного объекта к этому объекту, перешедшему в .create ()? Так, к примеру. Const Кошка = {INIT: функция (звук) {this.sound = звук; это вернуть}, makeSound: функция () {console.log (this.sound); }} Вар знак = Object.create (кат); mark.init ( 'meoow!'); mark.makeSound (); console.log (знак); Здесь прототип объекта Марка которую ссылается на объект Cat? Правильно? Если это верно Вопрос 1: Почему не JS просто установить объект родительского класса для подкласса (вместо его прототипа)? Вопрос 2: Что именно является использование того объекта-прототипа, связанный с каждым объектом? Не было наследство более комфортно, если бы мы только имели один объект, ссылающийся другой? Вопрос 3: Я прочитал это не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! т наследство будет более комфортно, если мы только что один объект, ссылающейся другое? Вопрос 3: Я прочитал это не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! т наследство будет более комфортно, если мы только что один объект, ссылающейся другое? Вопрос 3: Я прочитал это не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S не хорошая практика, чтобы установить прототип поля объекта? Мы должны работать только с реальными полями объектов и методов, это правда, и почему? т.е. Cat.prototype.age = 10; новый Object () В следующем коде ... функция кошки () {this.sound = 'wooof!'; } Вар кобылка = новая кошка (); console.log (filly.sound); console.log (кобыла); Вопрос 4: реальный объект кобылки наследует свойство кошки (или прототип объект кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S реальный объект наследует свойство кошки (или прототип объекта кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги! S реальный объект наследует свойство кошки (или прототип объекта кобылка в)? Это кажется очевидным, я не понимаю, как, когда и почему объекты прототипов используются в JavaScript, возможно? Пожалуйста помоги!
Shaz
1

голосов
0

ответ
58

Просмотры

Inheritace общих этапов испытаний от базового класса

При написании тестовых примеров для тестовых сценариев конца в конец с использованием Java, селен, Java; мы можем сохранить общие шаги в метод базового класса и конкретное дополнение, редактировать шаги в конкретном классе. общественный абстрактный класс XXXXBaseTest распространяется SeleniumTest {@Test общественного недействительный validateCalendarUi () бросает IOException {** ExpCalendar expCalendar = openExpCalendar (); ** Строка calenderAvailable = expCalendar.getHeaderViewText (); Assert.assertEquals (calenderAvailable, "Просмотр календаря", "Ошибка: Календарь не доступен"); }} Затем метод открыл календарь () переопределяется в каждом конкретном классе с конкретными шагами. класс XXXXXViewExpirationCalendarTest общественности распространяется RefDataExpirationCalendarTest {@Override защищен ExpCalendar openExpCalendar () {// Здесь пишут конкретные методы}} Является ли это надлежащий подход для испытания сценариев? Можем ли мы использовать понятие наследования, чтобы писать тесты таким образом?
1

голосов
1

ответ
25

Просмотры

Должен ли я получить соединение и закрыть соединение каждый раз, когда я вставить в базу данных?

Я просто хочу знать, если это действительно необходимо, в моей Java-приложение, чтобы позвонить GetConnection / closeConnection каждый раз, когда я хочу, чтобы вставить в базу данных, или я мог проверить подлинность пользователя / Pass в начале приложения и никогда не называйте Connection снова? // класс Conn частный статический конечная строка DRIVER = "oracle.jdbc.driver.OracleDriver"; частный статический окончательный строка URL = "JDBC: оракул: тонкий: @localhost: 1521: ХЕ"; частная статическая конечная строка USER = «ч»; частная статическая конечная строка PASS = «ч»; // Подключаем общественный статический GetConnection Connection () {попробуйте {Class.forName (DRIVER); вернуться DriverManager.getConnection (URL, USER, PASS); } Задвижка (ClassNotFoundException | SQLException ех) {проливают новый RuntimeException ( "Ошибка: RuntimeException", ех); }} // Закрывает государственный статический силу closeConnection (жулик соединения) {попробуйте {если (кон = NULL) {con.close (); }} Поймать (SQLException ех) {Logger.getLogger (ConnectionAcademia.class.getName ()) войти (Level.SEVERE, нулевой, ех). }} // Класс ДАО // Вставить продукт общественного недействительными createProduct (продукт р) {Соединение CON = ConnectionGym.getConnection (); PreparedStatement STMT = NULL; попробуйте {STMT = con.prepareStatement ( "INSERT INTO tb_product (key_product, наименование, цена, статус)" + "ЗНАЧЕНИЕ (,)??"); stmt.setInt (1, p.getKey_Product ()); stmt.setString (2, p.getName ()); stmt.setDouble (4, p.getPrice ()); stmt.setBoolean (6, p.getStatus ()); stmt.executeUpdate (); JOptionPane. showMessageDialog (нулевой, "Успех!"); } Поймать (SQLException ех) {JOptionPane.showMessageDialog (NULL, "Ошибка:" + ех); } Наконец {ConnectionAcademia.closeConnection (кон, STMT); }}
Lestat
1

голосов
1

ответ
26

Просмотры

Могу ли я добавить функции AddToCart (), removefromcart (), CreateOrder (), executeorder () в пользовательском классе?

я пытаюсь создать приложение ESHOP и это мой класс схема я дал обязанности и функции для моих классов, но это не очевидно для меня, как класс пользователь будет взаимодействовать с заказом и корзину класса. это нормально, например, чтобы добавить функции AddToCart (), removefromcart (), CreateOrder (), executeorder () и т.д., к классу пользователя ??? Проблема для меня в том, что эти функции не имеют никакого отношения с обязанностями класса пользователей, но с другой стороны, есть композиция отношения между ними и в какой-то, как класс пользователь должен использовать корзину и заказать класс. Заранее спасибо.
Vasilis Dellas
1

голосов
1

ответ
51

Просмотры

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

У меня есть проблема проектирование моей маленькая игры. У меня есть разные классы, и теперь я хочу, чтобы получить доступ к Method объектов из другого класса, который рисующие игры. Теперь это то, что я писал: общественный класс GameMain {общественный GameMain () {новый GameFrame (); }} Класс GameFrame: класс GameFrame общественности расширяет JFrame {общественного GameFrame () {новый GameLabel (это); }} Класс GameLabel: класс GameLabel общественности расширяет JLabel {личное GameFrame gameFrame; общественный GameLabel (GameFrame gameFrame) {} @ Override общественного недействительный paintComponent (график г) {}} Теперь у меня есть класс, который называется Player. Этот класс игрока есть метод, который называется paintPlayer (). Этот метод требует графического объекта в качестве параметра, чтобы нарисовать на нем. Поэтому я хочу, чтобы вызвать метод объекта paintPlayer () из моего paintComponent () метод в моем классе GameLabel. Поэтому мне нужно текущий объект игрока так, что я сделал: (старая версия моего класса GameMain) общественного класса GameMain {частный кадр GameFrame; частной торговой маркой GameLabel; частный игрок игрока; общественный GameMain () {кадр = новый GameFrame (это); Этикетка = новый GameLabel (это, кадр); игрок = новый плеер (это); } Общественного GameFrame GetFrame () {возвращение кадр; } Общественного GameLabel getLabel () {возвращение этикетки; } Общественного игрока getPlayer () {возвращение игрок; }} Я только что создал все игры объекта в моем классе GameMain и генерируется добытчиками для объекта. Тогда я просто дал всем объектным конструкторам экземпляр GameMain, так что я могу получить все объекты, что мне от моих добытчиков в классе GameMain. Так это то, что я сделал в моем классе GameLabel: класс GameLabel общественности расширяет JLabel {частного GameMain главного; общественный GameLabel (GameMain основной) {this.main = основные; } @Override общественного недействительный paintComponent (график г) {main.getPlayer () paintPlayer (г). }} Все работало, но мне сказали, что это очень плохой способ получить доступ к методу paintPlayer (). Мне сказали, что я даю много видимости для каждого класса в моем шаблоне, потому что я могу получить доступ каждый объект из каждого класса, который имеет экземпляр моего класса GameMain. Но то, что я должен делать вместо этого? Я имею в виду, чтобы нарисовать свой плеер мне нужен экземпляр его в моем классе GameLabel. } @Override общественного недействительный paintComponent (график г) {main.getPlayer () paintPlayer (г). }} Все работало, но мне сказали, что это очень плохой способ получить доступ к методу paintPlayer (). Мне сказали, что я даю много видимости для каждого класса в моем шаблоне, потому что я могу получить доступ каждый объект из каждого класса, который имеет экземпляр моего класса GameMain. Но то, что я должен делать вместо этого? Я имею в виду, чтобы нарисовать свой плеер мне нужен экземпляр его в моем классе GameLabel. } @Override общественного недействительный paintComponent (график г) {main.getPlayer () paintPlayer (г). }} Все работало, но мне сказали, что это очень плохой способ получить доступ к методу paintPlayer (). Мне сказали, что я даю много видимости для каждого класса в моем шаблоне, потому что я могу получить доступ каждый объект из каждого класса, который имеет экземпляр моего класса GameMain. Но то, что я должен делать вместо этого? Я имею в виду, чтобы нарисовать свой плеер мне нужен экземпляр его в моем классе GameLabel. Но то, что я должен делать вместо этого? Я имею в виду, чтобы нарисовать свой плеер мне нужен экземпляр его в моем классе GameLabel. Но то, что я должен делать вместо этого? Я имею в виду, чтобы нарисовать свой плеер мне нужен экземпляр его в моем классе GameLabel.
onCC
1

голосов
5

ответ
85

Просмотры

Как избежать, если

У меня есть объект запроса с полем request_type и рядом других областей. request_type может быть 'additionRequest', 'deletionRequest' 'informationRequest'. На основе request_type других полей в объекте запроса обрабатываются по-разному. Мой простой непредвзятый подход, если additionRequest algorithm1 еще, если deletionRequest algorithm2 еще если deletionRequest algorithm3 конца Как я могу, если заявления избежать их и до сих пор применяется надлежащий алгоритм?
matb
1

голосов
0

ответ
39

Просмотры

Javascript ООП - абстракция (с просьбой к примеру), инкапсуляция (? Группируя свойства / методы или поддержания состояния частной), полиморфизм

Я знаю, что есть тонны ЛСГ сообщений на здесь, а также много блогов, и т.д. Я не отправляю это, потому что им лень читать другие посты, я, наверное, читали о 100 и до сих пор есть некоторые вопросы, как много раз государственные вещи но не объяснить их много или некоторые вещи имеют противореча ответы, и было бы здорово, если бы я мог получить четкие ответы! Инкапсуляция Есть сообщения, которые говорят да, что, поскольку они определяют его как группируя свойства и функции. Если это было бы определение, я полностью понимаю, почему Javascript поддерживает инкапсуляцию. Тем не менее, есть также посты о сохранении членов частных. Как я понимаю (не знаю, Java), но в Java вот понятие - вы не можете получить доступ к свойствам без методов (поэтому только методы могут получить доступ к ним), а также вы на самом деле есть «частные / государственные» ключевые слова, чтобы держать вещи частные. Перед ES6: Его можно: Функция А (название) {имя вара = имя; this.getName = функция () {имя возврата; }} Переменная а = новый А ( "микрофон"); a.getName () // обращается к имени a.name // нет -> приводит к неопределенному В ES6 его не представляется возможным, потому что вы должны добавить метод доступа к свойству внутри конструктора, который вы не сделали бы класс А {конструктор (имя) {имя вара = имя; this.getName = () => {имя возврата; // только, как это вы могли бы вар ...}}} Так что мой вопрос: 1. Что такое инкапсуляция? Является ли это о группировке методов / свойств, или это о сохранении членов частные (которые не были бы возможны в ES6 и до ES6 не по умолчанию)? Абстракция "скрываются внутренние детали реализации. Есть ли способ разделить поведение без наследования, но только с использованием полиморфизма? Im обычно путают, что именно полиморфизм после чтения на некоторое время .. Наследование Наследование опр. при поддержке JS. Я просто хочу, чтобы перепроверить о классах ES6, что я получаю это правильно (я не имею опыта работы с Java и т.д.). Разница в том, что JS использует прототипичное наследование и не классическое, как Java и т.д. Разница заключается в том, что, когда я создаю новый экземпляр / = объект из моего класса ES6, это ссылки на свойства / методы класса, которые я использую, чтобы инициализировать новые объекты, в то время как в классическом наследовании, двигатель копирует свойства / методы из этого класса. S правильно? Может кто-то пожалуйста, объясните разницу - в результате - от этой разницы? но только используя полиморфизм? Im обычно путают, что именно полиморфизм после чтения на некоторое время .. Наследование Наследование опр. при поддержке JS. Я просто хочу, чтобы перепроверить о классах ES6, что я получаю это правильно (я не имею опыта работы с Java и т.д.). Разница в том, что JS использует прототипичное наследование и не классическое, как Java и т.д. Разница заключается в том, что, когда я создаю новый экземпляр / = объект из моего класса ES6, это ссылки на свойства / методы класса, которые я использую, чтобы инициализировать новые объекты, в то время как в классическом наследовании, двигатель копирует свойства / методы из этого класса. S правильно? Может кто-то пожалуйста, объясните разницу - в результате - от этой разницы? но только используя полиморфизм? Im обычно путают, что именно полиморфизм после чтения на некоторое время .. Наследование Наследование опр. при поддержке JS. Я просто хочу, чтобы перепроверить о классах ES6, что я получаю это правильно (я не имею опыта работы с Java и т.д.). Разница в том, что JS использует прототипичное наследование и не классическое, как Java и т.д. Разница заключается в том, что, когда я создаю новый экземпляр / = объект из моего класса ES6, это ссылки на свойства / методы класса, которые я использую, чтобы инициализировать новые объекты, в то время как в классическом наследовании, двигатель копирует свойства / методы из этого класса. S правильно? Может кто-то пожалуйста, объясните разницу - в результате - от этой разницы? Я просто хочу, чтобы перепроверить о классах ES6, что я получаю это правильно (я не имею опыта работы с Java и т.д.). Разница в том, что JS использует прототипичное наследование и не классическое, как Java и т.д. Разница заключается в том, что, когда я создаю новый экземпляр / = объект из моего класса ES6, это ссылки на свойства / методы класса, которые я использую, чтобы инициализировать новые объекты, в то время как в классическом наследовании, двигатель копирует свойства / методы из этого класса. S правильно? Может кто-то пожалуйста, объясните разницу - в результате - от этой разницы? Я просто хочу, чтобы перепроверить о классах ES6, что я получаю это правильно (я не имею опыта работы с Java и т.д.). Разница в том, что JS использует прототипичное наследование и не классическое, как Java и т.д. Разница заключается в том, что, когда я создаю новый экземпляр / = объект из моего класса ES6, это ссылки на свойства / методы класса, которые я использую, чтобы инициализировать новые объекты, в то время как в классическом наследовании, двигатель копирует свойства / методы из этого класса. S правильно? Может кто-то пожалуйста, объясните разницу - в результате - от этой разницы? это ссылки на свойства / методы класса, которые я использую, чтобы инициализировать новые объекты, в то время как в классическом наследстве, двигатель копирует свойства / методы из этого класса. S правильно? Может кто-то пожалуйста, объясните разницу - в результате - от этой разницы? это ссылки на свойства / методы класса, которые я использую, чтобы инициализировать новые объекты, в то время как в классическом наследстве, двигатель копирует свойства / методы из этого класса. S правильно? Может кто-то пожалуйста, объясните разницу - в результате - от этой разницы?
javascripting
1

голосов
1

ответ
90

Просмотры

Does contravariance and covariance means using also the same type?

Я совершенно запутался. Я наткнулся на правилах подписи (именуемых также B.Liskov в своей работе), что состояние: контравариации аргументов. m1 и m2 имеют одинаковое число аргументов. Если список типов аргументов в m1 является, и что т2 есть Ь, то ∀i. аи <би // это означает, что является подтипом б. Из другого учебного материала: Для типа функции DY → CY быть подтип (т.е. замещаемого для DX) → CX, мы должны быть ковариантным типа результата, но контравариантный в типе аргумента! Так это значит, что я никогда не надлежащего подтипы, если я использую только те же типы аргументов и возвращаемых типов? Я не понимаю, как при использовании того же типа считается также, то есть, когда я использую один и тот же тип для обоих аргументов метода родительского и дочернего класса, это контравариантен? Другими словами, C # не позволяет аргументы контравариации, это значит мой код никогда не LSP соответствует? Как я прочитал, что ЛСП требует, чтобы аргументы должны быть контравариантен .. класс Person {} класс Employee: Person {} класс PersonRegister {GetJobTitle (Служащий е) {вернуться e.JobTitle;}} класс DeriverRegister: PersonRegister {GetJobTitle (Person р) / / контрвариантность, используя меньше производного типа, не может быть сделано в C #} Как это может работать, если, например, менее производный тип не требовали поля, в данном примере JobTitle? Это свойство Работника, но обязательно в человеке. не может быть сделано в C #} Как это может работать, если, например, менее производный тип не требовали поля, в данном примере JobTitle? Это свойство Работника, но обязательно в человеке. не может быть сделано в C #} Как это может работать, если, например, менее производный тип не требовали поля, в данном примере JobTitle? Это свойство Работника, но обязательно в человеке.
John V

Просмотр дополнительных вопросов