Also, null strings are treated as boolean false:
deleted, faulty references
$filename "Banking.exe"
'include "$/inc/RTL32.inc"
'include "$/inc/RTL64.inc"
% TryAttachConsole
include "$/inc/console.inc"
SetConsoleTitle "Bank Transactions"
class account
static int count 'class variable
'data encapsulation - information hiding
private 'or protected
' Attributes
int account_num 'instance variables
double balance
public
' initialize
method constructor(int number)
count += 1
account_num = number
balance = 0.00
end method
method destructor()
end method
' method for secure access
method get_account_num() as int
return account_num
end method
' method for secure access
method get_balance() as double
return balance
end method
'
method pay_in(double amount)
balance += amount
printl "Payed in: " str(amount) & " Euro"
end method
method pay_out(double amount)
balance -= amount
printl "Payed out: " str(amount) & " Euro"
end method
method statement_of_account()
printl "Account Number: " & account_num & " Balance: " & str(balance) & " Euro"
end method
method same_account_num(account *a,*b) as int
sys aa=a.get_account_num
sys bb=b.get_account_num
if aa=bb then return -1
end method
method transfer(double amount, account *account_A, *account_Z)
account_A.statement_of_account()
account_Z.statement_of_account()
account_A.pay_out(amount)
account_Z.pay_in(amount)
printl "From Account Number: " & account_A.get_account_num()
print " transferred " & amount & " Euro"
print " to Account Number: " & account_Z.get_account_num() & cr
account_A.statement_of_account()
account_Z.statement_of_account()
end method
end class
' Access class variable via class name
printl "Number of Accounts: " & account.count
new account my_account(1234567) ' new instance of type account
printl "Account Number: " & my_account.get_account_num() ' read access
print " Balance: " & my_account.get_balance() & " Euro"
printl "Number of Accounts: " & account.count
new account your_account(2357666) ' new instance of type account
your_account.statement_of_account()
printl "Number of Accounts: " & account.count
' Assigning (coupling by reference)
account our_account at @your_account
'equiv: account *our_account : @our_account = @your_account
printl "Account Number: " & our_account.get_account_num() ' read access
print " Balance: " & our_account.get_balance() & " Euro"
our_account.statement_of_account()
printl "Number of Accounts: " & account.count
printl
'/*
if account.same_account_num(my_account,your_account) then
printl "My account and your account are identical."
else
printl "My account and your account are different."
end if
if account.same_account_num(our_account,your_account) then
printl "Our account and your account are identical."
else
printl "Our account and your account are different."
end if
'*/
my_account.pay_in(2000.00)
my_account.statement_of_account()
printl()
your_account.pay_in(100.00)
your_account.statement_of_account()
printl
our_account.pay_in(200.00)
our_account.statement_of_account() 'should be 300
printl
'do it
account.transfer(30.00, my_account, your_account)
printl cr & "Hit Enter ... " : waitkey
del my_account
del your_account 'alias our_account
$filename "Banking.exe"
'include "$/inc/RTL32.inc"
'include "$/inc/RTL64.inc"
% TryAttachConsole
include "$/inc/console.inc"
SetConsoleTitle "Bank Transactions"
class account
static int count 'class variable
'data encapsulation - information hiding
private 'or protected
' Attributes
int account_num 'instance variables
double balance
public
' initialize
method constructor(int number)
count += 1
account_num = number
balance = 0.00
end method
method destructor()
end method
' method for secure access
method get_account_num() as int
return account_num
end method
' method for secure access
method get_balance() as double
return balance
end method
'
method pay_in(double amount)
balance += amount
printl "Payed in: " str(amount) & " Euro"
end method
method pay_out(double amount)
balance -= amount
printl "Payed out: " str(amount) & " Euro"
end method
method statement_of_account()
printl "Account Number: " & account_num & " Balance: " & str(balance) & " Euro"
end method
end class
' Access class variable via class name
printl "Number of Accounts: " & account.count
new account my_account(1234567) ' new instance of type account
printl "Account Number: " & my_account.get_account_num() ' read access
print " Balance: " & my_account.get_balance() & " Euro"
printl "Number of Accounts: " & account.count
new account your_account(2357666) ' new instance of type account
your_account.statement_of_account()
printl "Number of Accounts: " & account.count
' Assigning (coupling by reference)
account our_account at @your_account
'equiv: account *our_account : @our_account = @your_account
printl "Account Number: " & our_account.get_account_num() ' read access
print " Balance: " & our_account.get_balance() & " Euro"
our_account.statement_of_account()
printl "Number of Accounts: " & account.count
printl
if @my_account = @your_account then
printl "My account and your account are identical."
else
printl "My account and your account are different."
end if
if @our_account = @your_account then
printl "Our account and your account are identical."
else
printl "Our account and your account are different."
end if
my_account.pay_in(2000.00)
my_account.statement_of_account()
printl()
your_account.pay_in(100.00)
your_account.statement_of_account()
printl
our_account.pay_in(200.00)
our_account.statement_of_account() 'should be 300
printl
sub transfer(double amount, account *a, *b)
account account_A at @a
account account_Z at @b
account_A.statement_of_account()
account_Z.statement_of_account()
account_A.pay_out(amount)
account_Z.pay_in(amount)
printl "From Account Number: " & account_A.get_account_num()
print " transferred " & amount & " Euro"
print " to Account Number: " & account_Z.get_account_num() & cr
account_A.statement_of_account()
account_Z.statement_of_account()
end sub
'transfer money
transfer(30.00, my_account, your_account)
del my_account
del your_account 'alias our_account
printl cr & "Hit Enter ... " : waitkey
$filename "Banking.exe"
'include "$/inc/RTL32.inc"
'include "$/inc/RTL64.inc"
% TryAttachConsole
include "$/inc/console.inc"
SetConsoleTitle "Bank Transactions"
class account
static int count 'class variable
'data encapsulation - information hiding
protected ' or private
' Attributes
int account_num 'instance variables
double balance
public
' initialize
method constructor(int number)
count += 1
account_num = number
balance = 0.00
end method
method destructor()
end method
' method for secure access
method get_account_num() as int
return account_num
end method
' method for secure access
method get_balance() as double
return balance
end method
'
method pay_in(double amount)
balance += amount
printl "Payed in: " str(amount) & " Euro"
end method
method pay_out(double amount)
balance -= amount
printl "Payed out: " str(amount) & " Euro"
end method
method statement_of_account()
printl "Account Number: " & account_num & " Balance: " & str(balance,2) & " Euro"
end method
method same_account_num(account *a,*b) as int
sys aa=a.get_account_num
sys bb=b.get_account_num
if aa=bb then return -1
end method
method transfer(double amount, account *account_A, *account_Z)
account_A.statement_of_account()
account_Z.statement_of_account()
account_A.pay_out(amount)
account_Z.pay_in(amount)
printl "From Account Number: " & account_A.get_account_num()
print " transferred " & amount & " Euro"
print " to Account Number: " & account_Z.get_account_num() & cr
account_A.statement_of_account()
account_Z.statement_of_account()
end method
end class
' --> Inheritance
class savings_account
has account
private
double rate_percent' ' additional attribute
public
' constructor of class savings_account
method constructor(int number, double interest)
// Java: super(number)' uses constructor of superclass account
count += 1 'not equivalent
account_num = number
' balance = 0.00
rate_percent = interest
end method
method destructor()
end method
' new methods for accessing attribute rate_percent
method get_rate_percent() as double
return rate_percent'
end method
method set_rate_percent(double interest)
rate_percent = interest'
end method
' new method
method pay_interest()
double interest_payable = (rate_percent * balance)/100)
printl "Interest payable: " & str(interest_payable,2)
balance += interest_payable ' uses inherited attributes
end method
end class
' Access class variable via class name
printl "Number of Accounts: " & account.count
new account my_account(1234567) ' new instance of type account
printl "Account Number: " & my_account.get_account_num() ' read access
print " Balance: " & my_account.get_balance() & " Euro"
printl "Number of Accounts: " & account.count
new account your_account(2357666) ' new instance of type account
your_account.statement_of_account()
printl "Number of Accounts: " & account.count
' Assigning (coupling by reference)
account our_account at @your_account
'equiv: account *our_account : @our_account = @your_account
printl "Account Number: " & our_account.get_account_num() ' read access
print " Balance: " & our_account.get_balance() & " Euro"
our_account.statement_of_account()
printl "Number of Accounts: " & account.count
printl
if account.same_account_num(my_account, your_account) then
printl "My account and your account are identical."
else
printl "My account and your account are different."
end if
if account.same_account_num(our_account, your_account) then
printl "Our account and your account are identical."
else
printl "Our account and your account are different."
end if
my_account.pay_in(2000.00)
my_account.statement_of_account()
printl
your_account.pay_in(100.00)
your_account.statement_of_account()
printl
our_account.pay_in(200.00)
our_account.statement_of_account()
printl
'transfer some money
account.transfer(30.00, my_account, your_account)
printl
' Inheritance
new savings_account my_savings_account(4444990, 5.2)
'each instance of class savings_account has 3 attributes
printl "Account Number: " & my_savings_account.get_account_num() 'inherited attribute
print " Balance: " & my_savings_account.get_balance() &" Euro"' 'inherited attribute
printl "Rate Percent: " & str(my_savings_account.get_rate_percent(),2)' ' new declared attribute
printl "Number of Accounts: " & account.count
'method pay_in(amount), pay_out(amount) and statement_of_account() can be used
my_savings_account.pay_in(250.00) 'inherited methods
my_savings_account.statement_of_account()'
my_savings_account.pay_out(10.00)'
my_savings_account.statement_of_account()
'instances of class savings_account can use the method pay_interest()
my_savings_account.pay_interest()' ' new method
my_savings_account.statement_of_account()'
printl cr & "Hit Enter ... " : waitkey
del my_account
del your_account 'alias our_account
del my_savings_account
$filename "Banking.exe"
'include "$/inc/RTL32.inc"
'include "$/inc/RTL64.inc"
% TryAttachConsole
include "$/inc/console.inc"
SetConsoleTitle "Bank Transactions"
class account
static int count 'class variable
'data encapsulation - information hiding
protected ' or private
' Attributes
int account_num 'instance variables
double balance
public
method init()
count += 1
balance = 0.00
end method
' methods for secure access
method set_account_num(int number)
account_num = number
end method
method get_account_num() as int
return account_num
end method
method get_balance() as double
return balance
end method
method pay_in(double amount)
balance += amount
printl "Payed in: " str(amount) & " Euro"
end method
method pay_out(double amount)
balance -= amount
printl "Payed out: " str(amount) & " Euro"
end method
method statement_of_account()
printl "Account Number: " & account_num & " Balance: " & str(balance,2) & " Euro"
end method
method same_account_num(account *a,*b) as int
sys aa=a.get_account_num
sys bb=b.get_account_num
if aa=bb then return -1
end method
method transfer(double amount, account *account_A, *account_Z)
account_A.statement_of_account()
account_Z.statement_of_account()
account_A.pay_out(amount)
account_Z.pay_in(amount)
printl "From Account Number: " & account_A.get_account_num()
print " transferred " & amount & " Euro"
print " to Account Number: " & account_Z.get_account_num() & cr
account_A.statement_of_account()
account_Z.statement_of_account()
end method
end class
' --> Inheritance
class savings_account
has account
private
double rate_percent' ' additional attribute
public
' new methods for accessing attribute rate_percent
method get_rate_percent() as double
return rate_percent'
end method
method set_rate_percent(double interest)
rate_percent = interest'
end method
' new method
method pay_interest()
double interest_payable = (rate_percent * balance)/100)
printl "Interest payable: " & str(interest_payable,2)
balance += interest_payable ' uses inherited attributes
end method
end class
' Access class variable via class name
printl "Number of Accounts: " & account.count
account my_account ' new instance of type account
my_account.init()
my_account.set_account_num(1234567)
printl "Account Number: " & my_account.get_account_num() ' read access
print " Balance: " & my_account.get_balance() & " Euro"
printl "Number of Accounts: " & account.count
account your_account ' new instance of type account
your_account.init()
your_account.set_account_num(2357666)
your_account.statement_of_account()
printl "Number of Accounts: " & account.count
' Assigning (coupling by reference)
account our_account at @your_account
'equiv: account *our_account : @our_account = @your_account
printl "Account Number: " & our_account.get_account_num() ' read access
print " Balance: " & our_account.get_balance() & " Euro"
our_account.statement_of_account()
printl "Number of Accounts: " & account.count
printl
if account.same_account_num(my_account, your_account) then
printl "My account and your account are identical."
else
printl "My account and your account are different."
end if
if account.same_account_num(our_account, your_account) then
printl "Our account and your account are identical."
else
printl "Our account and your account are different."
end if
my_account.pay_in(2000.00)
my_account.statement_of_account()
printl
your_account.pay_in(100.00)
your_account.statement_of_account()
printl
our_account.pay_in(200.00)
our_account.statement_of_account()
printl
'transfer some money
account.transfer(30.00, my_account, your_account)
printl
' Inheritance
savings_account my_savings_account'(4444990, 5.2)
my_savings_account.init()
my_savings_account.set_account_num(4444990)
my_savings_account.set_rate_percent(5.2)
'each instance of class savings_account has 3 attributes
printl "Account Number: " & my_savings_account.get_account_num() 'inherited attribute
print " Balance: " & my_savings_account.get_balance() &" Euro"' 'inherited attribute
printl "Rate Percent: " & str(my_savings_account.get_rate_percent(),2)' ' new declared attribute
printl "Number of Accounts: " & account.count
'method pay_in(amount), pay_out(amount) and statement_of_account() can be used
my_savings_account.pay_in(250.00) 'inherited methods
my_savings_account.statement_of_account()'
my_savings_account.pay_out(10.00)'
my_savings_account.statement_of_account()
'instances of class savings_account can use the method pay_interest()
my_savings_account.pay_interest()' ' new method
my_savings_account.statement_of_account()'
printl cr & "Hit Enter ... " : waitkey
'ACCESSING THE BASE CLASS BY SPECIFIED NAME
class bb
private static sys counter
method constructor()
counter++
end method
method destructor()
end method
method CounterVal() as int
return counter
end method
end class
class cc
has bb bbase 'give a name to the base class bb
method constructor()
bbase.constructor()
end method
method destructor()
bbase.destructor()
end method
end class
new cc c
print c.bbase.counterVal()
del c
' Account7.o2bas
$filename "Banking.exe"
'include "$/inc/RTL32.inc"
'include "$/inc/RTL64.inc"
% TryAttachConsole
include "$/inc/console.inc"
SetConsoleTitle "Bank Transactions"
'accessing the base class by specified name
class counter
private static sys counterVal
method constructor()
counterVal++
end method
method destructor()
end method
method count() as int
return counterVal
end method
end class
class account
has counter num 'give a name to the base class counter
'data encapsulation - information hiding
protected ' or private
' Attributes
int accountNumber 'instance variables
double balance
public
' initialize
method constructor(int number)
num.constructor
accountNumber = number
balance = 0.00
end method
method destructor()
num.destructor
end method
' methods for secure access
method getAccountNumber() as int
return accountNumber
end method
method getBalance() as double
return balance
end method
method pay_in(double amount)
balance += amount
printl "Payed in: " str(amount) & " Euro"
end method
method pay_out(double amount)
balance -= amount
printl "Payed out: " str(amount) & " Euro"
end method
method statement_of_account()
printl "Account Number: " & accountNumber & " Balance: " & str(balance,2) & " Euro"
end method
method sameAccountNumber(account *a,*b) as int
sys aa=a.getAccountNumber
sys bb=b.getAccountNumber
if aa=bb then return -1
end method
method transfer(double amount, account *account_A, *account_Z)
account_A.statement_of_account()
account_Z.statement_of_account()
account_A.pay_out(amount)
account_Z.pay_in(amount)
printl "From Account Number: " & account_A.getAccountNumber()
print " transferred " & amount & " Euro"
print " to Account Number: " & account_Z.getAccountNumber() & cr
account_A.statement_of_account()
account_Z.statement_of_account()
end method
end class
' --> Inheritance
class savingsAccount
has account
private
double ratePercent ' additional attribute
public
' constructor of class savingsAccount
method constructor(int number, double interest)
num.constructor()
accountNumber = number
balance = 0.00
ratePercent = interest
end method
method destructor()
num.destructor()
end method
' new methods for accessing attribute ratePercent
method getRatePercent() as double
return ratePercent'
end method
method setRatePercent(double interest)
ratePercent = interest'
end method
' new method
method pay_interest()
double interest_payable = (ratePercent * balance)/100)
printl "Interest payable: " & str(interest_payable,2)
balance += interest_payable ' uses inherited attributes
end method
end class
' --> overriding, reimplementation
class giroAccount
has account
private
double limit
public
method constructor(int number, double bankLine)
num.constructor()
accountNumber = number
limit = abs(bankLine)
end method
method destructor()
num.destructor()
end method
method getLimit() as double
return limit
end method
' method for access, check if arg is positiv
method setLimit(double limit)
limit = abs(limit)
end method
' --> reimplementation
method pay_out(double amount)
if amount <= (balance + limit) then
' account.pay_out(amount) ' does not work for statement_of_account
balance -= amount
printl "Payed out: " str(amount) & " Euro"
else
printl "Exceeded Limit!"
end if
end method
end class
' Access class variable via class name
printl "Number of Accounts: " & account.num.count
new account myAccount(1234567) ' new instance of type account
printl "Account Number: " & myAccount.getAccountNumber() ' read access
print " Balance: " & myAccount.getBalance() & " Euro"
printl "Number of Accounts: " & account.num.count
new account yourAccount(2357666) ' new instance of type account
yourAccount.statement_of_account()
printl "Number of Accounts: " & account.num.count
' Assigning (coupling by reference)
account ourAccount at @yourAccount
'equiv: account *ourAccount : @ourAccount = @yourAccount
ourAccount.statement_of_account()
printl "Number of Accounts: " & account.num.count
printl
if account.sameAccountNumber(myAccount, yourAccount) then
printl "My account and your account are identical."
else
printl "My account and your account are different."
end if
if account.sameAccountNumber(ourAccount, yourAccount) then
printl "Our account and your account are identical."
else
printl "Our account and your account are different."
end if
printl
myAccount.pay_in(2000.00)
myAccount.statement_of_account()
printl
yourAccount.pay_in(100.00)
yourAccount.statement_of_account()
printl
ourAccount.pay_in(200.00)
ourAccount.statement_of_account()
printl
'transfer some money
account.transfer(30.00, myAccount, yourAccount)
printl
' Inheritance
new savingsAccount mySavingsAccount(4444990, 5.2)
'each instance of class savingsAccount has 3 attributes
printl "Account Number: " & mySavingsAccount.getAccountNumber() 'inherited attribute
print " Balance: " & mySavingsAccount.getBalance() &" Euro"' 'inherited attribute
printl "Rate Percent: " & str(mySavingsAccount.getRatePercent(),2)' ' new declared attribute
printl "Number of Accounts: " & account.num.count
'method pay_in(amount), pay_out(amount) and statement_of_account() can be used
mySavingsAccount.pay_in(250.00) 'inherited methods
mySavingsAccount.statement_of_account()'
mySavingsAccount.pay_out(10.00)'
mySavingsAccount.statement_of_account()
'instances of class savingsAccount can use the method pay_interest()
mySavingsAccount.pay_interest()' ' new method
mySavingsAccount.statement_of_account()'
printl
' Reimplementation
myAccount.pay_out(1700.00) ' method pay_out(amout) of class account
myAccount.statement_of_account()
printl
printl "Trying to draw 5000 Euro."
myAccount.pay_out(5000.00) ' method pay_out(amout) of class account
myAccount.statement_of_account()
printl
new giroAccount myGiroAccount(1733065,100)
myGiroAccount.statement_of_account()
printl "Bank Line = " & myGiroAccount.getLimit()
printl "Number of Accounts: " & account.num.count
myGiroAccount.pay_in(400.00)
myGiroAccount.statement_of_account()
printl "Trying to draw 450 Euro."
myGiroAccount.pay_out(450.00) ' method pay_out(amout) of class giroAccount
myGiroAccount.statement_of_account()
printl "Trying to draw 350 Euro."
myGiroAccount.pay_out(350.00) ' method pay_out(amout) of class giroAccount
myGiroAccount.statement_of_account()
printl cr & "Hit Enter ... " : waitkey
del myAccount
del yourAccount 'alias ourAccount
del mySavingsAccount
del myGiroAccount
' --> overriding, reimplementation
class giroAccount
from account 'single line inheritance
private
double limit
public
method constructor(int number, double bankLine)
num.constructor()
accountNumber = number
limit = abs(bankLine)
end method
method destructor()
num.destructor()
end method
method getLimit() as double
return limit
end method
' method for access, check if arg is positiv
method setLimit(double limit)
limit = abs(limit)
end method
' --> reimplementation
method pay_out(double amount)
if amount <= (balance + limit) then
' account.pay_out(amount) ' does not work for statement_of_account
' invoking the class directly will only work for static elements
' but this technique can be used safely with single line inheritance (as in java)
account a at @this
a.pay_out(amount)
' balance -= amount
' printl "Payed out: " str(amount) & " Euro"
else
printl "Exceeded Limit!"
end if
end method
end class