2015-02-08 3 views
1

Итак, этот проект немного за пределами моей зоны комфорта. Я бы описал свою нынешнюю стадию развития как та, в которой: «Я знаю о таких вещах, как: сбор, дизайн-паттерны и вообще то, что делает для хорошего ООП. Но все это в моих нынешних пределах. И поэтому я, вероятно, не использую их и не пытаюсь использовать их столько, сколько должен ».Java: советы и предложения ООП для продвижения небольшого приложения

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

Короче, вот что я пытаюсь сделать, вот что у меня есть, а вот где мне нужно пойти:

То, что я пытаюсь сделать: Простейшим способ заявить цели для этого приложения: у меня есть кредитная карта (этот класс - класс, который я сделал), у меня есть кошельки, и у меня есть люди. Рассматривая это с точки зрения высокого уровня, я кладу карточки в кошельки и кошельки в людей. У меня 3 карты, они действительно отличаются только их «именами» и процентными ставками. Я хочу, чтобы некоторые кошельки имели 1 карточку, а для других - все три. Что касается кошельков, то каждый человек нуждается хотя бы в одном, но я бы хотел дать кому-то два. И это действительно так, я разработал некоторую математику для простого интереса к карточке, которую я свяжу в какой-то момент, но в основном я ищу для создания чистого и хорошо разработанного приложения.

Что у меня есть: Как я уже сказал, у меня есть класс CreditCard. Я все еще прекрасно настраиваю его, но мне удалось его улучшить, и я не очень доволен этим. Я включу этот класс ниже, чтобы предоставить контекст для приложения, а также, чтобы вы могли предоставить предложения, если это необходимо. В верхней части класса вы увидите много документации. Это в основном только математика, и это логика, для разработки простых интересов. Вот увидишь. Но у меня также есть два теста, которые я кодирую, вы тоже это увидите.

Куда мне нужно: У меня есть кредитные карты. Теперь мне нужны кошельки и люди. С моей точки зрения, я видел, как кошелек использует ArrayList. Хотя, может быть, другой вариант коллекций может служить лучше. У меня в основном (в основном) используется ArrayList, и поэтому я обычно использую ArrayList. Это доработано до сих пор ... Помимо этого, я подумывал о том, чтобы сделать Кошелек и Личность абстрактными, что кажется хорошей идеей, но в очередной раз не так много опыта в принятии этих решений.

Итак, в конце всего этого, я ищу какое-то направление, конформирование хороших идей и альтернатив более слабым. Если они могут сочетаться с примерами или если предложения могут выражаться как в словах, так и в коде, это было бы оптимально, потому что я получаю гораздо больше советов, когда вижу это в действии. Для меня предложение ОК с кодом, «вообще» более полезно, чем простое предложение без него. Все дело в возможности применить этот совет. Но, это только я и все разные. То, что я могу вам сказать, это определенно, заключается в том, что все предложения, независимо от того, что они есть, будут оценены и полезны. Потому что я делаю это, я здесь, чтобы учиться.

/* 
* Test Cases: 
* 1) 1 person has 1 wallet and 3 cards (1 Visa, 1 MC 1 Discover) – Each  Card has a balance of $100 – calculate the total interest (simple interest) for this person and per card. 
* 
* 2) 1 person has 2 wallets  Wallet 1 has a Visa and Discover , wallet 2 a MC -  each card has $100 
* balance - calculate the total interest(simple interest) for this person and interest per wallet 
*/ 

/* 
* Formula Key: 
* 
* Algebraic Symbols: 
* A = Total Accrued Amount (principal + interest) 
* P = Principal Amount 
* I = Interest Amount 
* r & R = Rate of Interest per year in percentage & decimal 
* t = Time Period involved in months or years(duration pertaining to this equation) 
* 
* Rate of Interest, Percentage To Decimal Equations: 
* R = r * 100 
* r = R/100 
* 
* Simple Interest Equation: 
* A = P(1 + (r * t)) 
*/ 

/* 
* Card: 
* VISA 10% 
* 
* Equation: 
* Accrued Amount(A) = Principle Amount(P) * (1 +(Interest Rate(r) * Time Period(t))) 
* 
* Calculation: 
* First, converting Interest Rate(R) of 10%, to, Interest Rate(r) of 0.1 
* r = R/100 = 10%/100 = 0.1 per year, 
* put Time Period(t) of 1 month into years, 
* months/year(1 month ÷ 12) = 0.08 years 
* 
* Solving Equation: 
* A = 100(1 + (0.1 × 0.08)) = 100.8 
* A = $ 100.80 
* 
* Solution: 
* The total Amount Accrued(A), Principal(P) plus Interest(I), 
* from Simple Interest on a Principal(P) of $ 100.00 
* at a Rate(r = R/100(convert a percentage to a decimal)) of 10% or 0.1 per year 
* for 0.08 years, 1 month(t) is $ 100.80. 
*/ 

/* 
* Card: 
* MC(Master Card) 5% 
* 
* Equation: 
* Accrued Amount(A) = Principle Amount(P) * (1 +(Interest Rate(r) * Time Period(t))) 
* 
* Calculation: 
* First, converting Interest Rate(R) of 5%, to, Interest Rate(r) of 0.05 
* r = R/100 = 5%/100 = 0.05 per year, 
* put Time Period(t) of 1 month into years, 
* months/year(1 month ÷ 12) = 0.08 years 
* 
* Solving Equation: 
* A = 100(1 + (0.05 × 0.08)) = 100.4 
* A = $ 100.40 
* 
* Solution: 
* The total Amount Accrued(A), Principal(P) plus Interest(I), 
* from Simple Interest on a Principal(P) of $ 100.00 
* at a Rate(r = R/100(convert a percentage to a decimal)) of 5% or 0.05 per year 
* for 0.08 years, 1 month(t) is $ 100.40. 
*/ 

/* 
* Card: 
* Discover 1% 
* 
* Equation: 
* Accrued Amount(A) = Principle Amount(P) * (1 +(Interest Rate(r) * Time Period(t))) 
* 
* Calculation: 
* First, converting Interest Rate(R) of 1%, to, Interest Rate(r) of 0.01 
* r = R/100 = 1%/100 = 0.01 per year, 
* put Time Period(t) into years, 
* months/year(1 month ÷ 12) = 0.08 years 
* 
* 
* Solving Equation: 
* A = 100(1 + (0.01 × 0.08)) = 100.08 
* A = $ 100.08 
* 
* Solution: 
* The total Amount Accrued(A), Principal(P) Plus Interest(I), 
* from Simple Interest on a Principal(P) of $ 100.00 
* at a Rate(r = R/100(convert a percentage to a decimal)) of 1% or 0.01 per year 
* for 0.08 years, 1 month(t) is $ 100.08. 
*/ 

public class CreditCard 
{ 
    private BrandOfCard brandOfCard; 
    private static final double PRINCIPAL_AMOUNT = 100.00; 
    private static final double TIME_PERIOD = 0.08; 

    public CreditCard(BrandOfCard brandOfCard) 
    { 
     this.brandOfCard = brandOfCard; 
    } 

    /* 
    * A = P(1 + (r * t)) 
    */ 
    public double getAccruedAmount() 
    { 
     double accruedAmount; 
     accruedAmount = PRINCIPAL_AMOUNT * (1 + (brandOfCard.getInterestRate() * TIME_PERIOD)); 
     return accruedAmount; 
    } 

    public enum BrandOfCard 
    { 
     VISA(0.1), MASTER_CARD(0.05), DISCOVER(0.01); 

     private final double interestRate; 

     BrandOfCard(double interestRate) 
     { 
      this.interestRate = interestRate; 
     } 

     public double getInterestRate() 
     { 
      return interestRate; 
     } 
    } 

    //bottom of class 
    public static void main(String[] args) 
    { 
     CreditCard visa = new CreditCard(BrandOfCard.VISA); 
     CreditCard masterCard = new CreditCard(BrandOfCard.MASTER_CARD); 
     CreditCard discover = new CreditCard(BrandOfCard.DISCOVER); 

     double accruedAmount; 

     accruedAmount = visa.getAccruedAmount(); 
     System.out.println("Visa card, with a principle amount of $100.00, & an interest rate of 10%, " + 
          "has accrued $" + (accruedAmount - PRINCIPAL_AMOUNT) + " in interest, " + 
          "over the last monthly term."); 
     System.out.println("The total amount due on this card is now $" + accruedAmount); 


     accruedAmount = masterCard.getAccruedAmount(); 
     System.out.println("Master Card card, with a principle amount of $100.00, & an interest rate of 5%, " + 
          "has accrued $" + (accruedAmount - PRINCIPAL_AMOUNT) + " in interest, " + 
          "over the last monthly term."); 
     System.out.println("The total amount due on this card is now $" + accruedAmount); 

     accruedAmount = discover.getAccruedAmount(); 
     System.out.println("Discover card, with a principle amount of $100.00, & an interest rate of 1%, " + 
       "has accrued $" + (accruedAmount - PRINCIPAL_AMOUNT) + " in interest, " + 
       "over the last monthly term."); 
     System.out.println("The total amount due on this card is now $" + accruedAmount); 
    } 
} 
+0

W шляпа является целью «Кошелек»? –

+0

ну, я думаю, во-первых, мне показалось, что это имеет смысл для меня, «пытаясь заставить ваш код лучше представлять мир живого мира». Так вот, из этого я начал пытаться решить, почему кошелек полезен и что он на самом деле делает. Чтобы довести это до уровня кода, я бы сказал, что кошелек содержит группу подобных объектов, в данном случае карт. Если у человека должно быть два кошелька, кошельки хранят предметы и обеспечивают разделение/разницу между двумя группами.Вот что я хотел бы сделать в кошельках. – ReedWilliams19842004

+0

Хотя это верно, цель ООП заключается не в том, чтобы реализовать каждый возможный класс в вашем дизайне, а только в тех, которые влияют на функциональность. Как баланс карты, интерес и т. Д. Зависят от конкретного кошелька, в котором он хранится? –

ответ

0

Прежде всего не обращайтесь к объекту счастливого! Больше объектов! = Лучший код!

Посмотрите на это с точки зрения данных, потому что большинство программистов ООП теряют свой путь. Этот материал хранится реляционно по какой-то причине.

  • Люди делают, что объект
  • Кошелек - это просто средний ключ присоединиться н количество карт к человеку.
  • CC сделать что объект, поскольку каждый CC определил условия оплаты, сборов, процентных ставок и т.д.

То, что вы в конечном итоге с является:

  • Таблица пользователей.
  • Таблица карт.

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

руб действительно применяется. Так же, как банк добавляет свои депозиты на свой счет перед тем они начинают обработку чеков или авто платежей, вы должны применять любые отправленные платежи, прежде чем известково значение процентных + сборов, чтобы добавить к балансу, так:

for owners{ 
for cards with card.ownerID = owners.ID{ 
    card.balance=card.balance-payments ; 
    card.balance=card.balance+calcInterest(card.balance, card.rate)+GetSumOfFees(card); 
    } 
} 

Это основная пакетная работа, которую каждый CC-эмитент запускает каждую ночь.

На зарядной стороне вещей это наименьший код, который они могут уйти с синусом это должно произойти практически мгновенно на терминале оплаты труда и т.д. и т.п.

public static String chargeThis(String CCData, Double AMT){ 

    CCNum = GetCCNum(CCData) ; 
    boolean isValid = validateCC(ccData); 
    if(isValid) return chargeCC(ccNum,AMT) else return rejectedTrans ; 
} 

О списках хэш-карты и т.д. в Java или векторы в C++ ...

ЛЮБАЯ операция на тех, что их размеры будут стремительно быстро, вплоть до момента, когда они превысят размер кеша L2! После того как они превышают размер кэша L2, они сохраняются в системной памяти, и их производительность переходит в резервуар. На данный момент связанный список превосходит, поскольку добавление или вычитание элемента - это просто вставка узла или удаление узла.

Помните, что получение расширенной производительности требует понимания машины и понимания того, как JVM или компилятор упорядочивает вещи. Чтобы от лучшего к худшему хранения следующим образом:

  • L0 кэш - 1 процессор цикла
  • L1 кэш - 2 процессора циклов
  • кэш L2 - 5 до 10 Процессорные циклов
  • системной памяти 1000- циклов центрального процессора
  • Ethernet (получение данных по проводам) 10-ых K циклов
  • Disk - 50 до 100 K циклов
+0

отрицательный для отсутствия точки. циклы подсчета удерживают вас в пути, когда мы программисты-программисты пишем два или три класса здесь? – Aitch

+0

@Aitch Я даже не знаю, что это значит. Кстати, я программист ООП. Определите данные FIRST, объекты вторые. – FlyingGuy

+0

Это замечательно! Это то, о чем я говорю. Вы предлагаете карту и мгновенно поразите меня как отличную идею. Я только что закончил с кратким обзором карт, и теперь мне интересно, почему я не использовал их чаще. Я думаю, что большой вызов для такого человека, как я (самоучка, отсутствие фона, отсутствие ресурсов за пределами сети), когда вы учите массовый язык, такой как Java, - это просто размер языка (не говоря уже о дополнительных языках и технологиях, которые можно использовать с) и время, которое потребуется, чтобы изучить все это. Большинство людей имеют опыт, обучение или руководство, чтобы помочь им перемещаться, – ReedWilliams19842004

Смежные вопросы