Java: ООП совет и предложение по продвижению небольшого приложения

1

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

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

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

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

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

Где мне нужно идти: Ну, у меня есть кредитные карты. Теперь мне нужны кошельки и люди. С моей точки зрения, я видел, как кошелек использует 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
    Какова цель Wallet ?
  • 0
    Ну, во-первых, мне показалось, что это просто имело смысл, пытаясь «заставить ваш код лучше представлять собой живой мир». Именно поэтому я начал пытаться решить, почему кошелек полезен и что он делает на самом деле. Чтобы довести это до уровня кода, я бы сказал, что кошелек содержит группу похожих объектов, в данном случае карточек. Если у человека должно было быть два кошелька, кошельки содержат предметы и обеспечивают разделение / разницу между двумя группами. Вот чего я хотел бы достичь в своих кошельках.
Показать ещё 3 комментария
Теги:
arraylist
collections
oop
abstract

1 ответ

0
Лучший ответ

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

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

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

В итоге вы получаете:

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

Кошелек, если вы не хотите назначать ему определенные атрибуты, на самом деле является несуществующей вещью, поскольку владелец карты Key в 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
  • Диск - от 50 до 100 К циклов
  • 0
    отрицательный за упущение. подсчет циклов удерживает вас в пути, когда мы, программисты, пишем здесь два или три класса?
  • 0
    @ Я даже не знаю, что означает этот комментарий. Кстати, я также программист ООП. Определите данные ПЕРВЫМИ, объекты вторыми.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню