Multiple Inheritance

INTRODUCTION

The main objective of this small article is to provide an introduction about the multiple inheritance subject, give an overview of how it is implemented with the Java programming language and my considerations to conclude.

THE INHERITANCE CONCEPT

The concept of inheritance is very close to what we have in genealogy. Fathers share common attributes with sons, whom all share common attributes from its parents, grandparents and so on. Yet, all of them have their own particularities, like eye color, hair color, etc…

xid-94316198_6Figure 1 Illustration of Genealogy

THE INHERITANCE CONCEPT IN PROGRAMMING LANGUAGES

According to Sklenar, 1997, Simula is known and considered as the first object-oriented programming language. This is based on the concept of the conceptualization of the real world brought up to the computing space.

The key aspect of objected oriented programming is to simulate the real world conceptualization of how things are designed, organized and oriented. One of these aspects is the inheritance concept, which is defined and illustrated by Oracle, 2016 as object-oriented programming allows classes to inherit commonly used state and behavior from other classes. The figure below illustrates the inheritance in a bicycle illustrated analogy:

 

xid-94316199_6

Figure 2 Illustration of inheritance

MULTIPLE INHERITANCE

The concept of multiple inheritances can be illustrated with genealogy indeed. Father and mother share common aspects with their children the same way grandparents share commons aspects and particularities.

Although multiple inheritances to do not be implemented by some objected oriented programming languages, it is very common to happen in different manners.

IMPLEMENTATION ON THE JAVA PLATFORM

It is widely known that Java does not support multiple inheritances, however, Java 8 implements functional interfaces (a resource very similar and that can be compared pretty much the same) which are very similar to the concept of multiple inheritances. There is an example which illustrates its functionality below:

code1

(ProgramCreek.com, 2016)

CONCLUSION

In spite of being a powerful resource to the programmer, it is commonly criticized by its complication to debug and even to lead to unnecessary design complexity. The Java programming language does not support it directly; on the other hand, it implements resources (such as function interfaces) which may lead in such a manner to achieve the same functional result.

REFERENCES

ISOGG Wiki. 2016. Mitochondrial DNA tests. [ONLINE] Available at: http://isogg.org/wiki/Mitochondrial_DNA_tests. [Accessed 20 April 2016].

Sklenar J. 1997. INTRODUCTION TO OOP IN SIMULA. [ONLINE] Available at: http://staff.um.edu.mt/jskl1/talk.html#History_I. [Accessed 20 April 2016].

What Is Inheritance?. 2016. What Is Inheritance? ONLINE] Available at: https://docs.oracle.com/javase/tutorial/java/concepts/inheritance.html. [Accessed 19 April 2016].

Default Methods in Java 8 and Multiple Inheritance. 2016. ProgramCreek.com. [ONLINE] Available at: http://www.programcreek.com/2014/12/default-methods-in-java-8-and-multiple-inheritance/. [Accessed 19 April 2016].

Overloading Operations

INTRODUCTION

The main objective of this small article is to provide an introduction about operators in Java, the possibility of overloading operators and method overloading.

OVERLOADING OPERATORS

Operators in programming languages are used to assign, and calculate a math expression, for instance. The usual Java operators are: + – * / for addition, subtraction, multiplication, and division. The Java language also offers also shortcuts like +=, for instance.

Actually Java does not support overloading with operators with objects. That means, you can’t use the following expression:

ademir1

Figure 1 Operator overloading in Java

The most close to an operator overloading is the possibility of using the + operator to concatenate Strings.

ademir2

Figure 2 String concatenation in Java

METHOD OVERLOADING

Method overloading is the possibility of two of more methods to have the same names in a class. In Java, you may specify the same name for methods, however using a different argument list, in terms of quantity of parameters or the type of the argument.

The method signature can be defined as The name of a method and the list of parameter types in the heading of the method definition is called the method signature.The signature of a method consists of the method name and the list of types for parameters that are listed in the heading of the method name”. (Savitch, 2013).The code below shows the overloading of the method setDate:

ademir5

Figure 3 Illustration of method overloading written using the Java Programming Language

CONCLUSION

I personally believe the possibility of String concatenation using the Java language is something trivial for a programming language and it is implemented as expected, however in Java, I don’t think the operand of concatenating objects would be a good resource in terms of the search for being semantically clean. The overriding method possibility is such a good resource in terms of producing APIs and the extensibility is such a good resource to be pointed.

REFERENCES

Savitch, W, 2013. Absolute Java. 5th ed. USA: Pearson.

Horstmann & Cornell, 2008. Core Java – Volume 1 fundamentals. 8th ed. California, USA: Sun Microsystems Press.

Continue reading “Overloading Operations”

Comparing Objects in Java

THE COMPARISON OPERATOR

The Java programming language offer some operators to assign, compare and execute math operations. Considering the object of study in this paper, the operator ”==’ is used in the Java language in order to compare only primitive objects. For instance, if you execute the procedure ‘2 == 2’ or ‘2d == 2d’, the result will be simply TRUE, because both of the operations use primitive types in Java. In the case of using object comparisons, the operator ‘==’ will not be a good resource to use, except if you are trying to compare whether the object references in the memory are the aspect in the comparison subject.

COMPARING OBJECTS IN JAVA

To compare objects in Java, the $object.equal method is available in all the java object classes, including Strings, which in Java , String is a class, not a primitive type. The String class is part the JSE library, and it is accessible by any Java program.

One very interesting thing in Java s about Strings. A good illustration, according to Horstman & Cornell, 2008:

String greeting = "Hello"; //initialize greeting to a string
 if (greeting == "Hello") . . .
 // probably true
 if (greeting.substring(0, 3) == "Hel") . . .
 // probably false

“If the virtual machine would always arrange for equal strings to be shared, then you could use the == operator for testing equality. But only string constants are shared, not strings that are the result of operations like + or substring” (SANCHEZ & CANTON, 2002).

CONCLUSION

In spite of Java to have its particularities, I personally believe the way the Strings and comparison in Java are a good and extensible way of implementing it. Programmers are able to override the equals method, in order to define what really is equality for their own objects and the language offers many ways and possibilities in order to provide good performance when using comparison between primitives and objects.

REFERENCES

Horstmann & Cornell, 2008. Core Java – Volume 1 fundamentals. 8th ed. California, USA: Sun Microsystems Press.

SANCHEZ & CANTON, 2002. Java programming for engineers. 1st ed. Florida, USA: CRC Press LLC.

Pointers in C++ vs References in Java

INTRODUCTION

The objective of this small article is to give an introduction about the pointers subject considering the C/C++ programming language, give an introduction how it is implemented with the Java programming language and a conclusion of why pointers are not implemented in Java as it is in c++.

THE COMPUTER MEMORY

According to Hubbard, 2000, the computer memory can be imagined as an object formed by cells, which can be compared to a large array of bytes. A computer with 256mb of RAM (random access memory) for instance, may be represented as the image below:

memory1

The image on the left illustrate a computer memory starting from 0 to 268,435,455, which is commonly represented as 0x00000000 to 0x0fffffff.

Considering the declaration of the variable ‘n’ as:

int n;

And supposing it is stored at the address of 0x0064fdf0, this can be illustrated as:

memory2

The variable will occupy 4 bytes of memory, considering 0x0064fdf0, 0x0064fdf1, 0x0064fdf2, and 0x0064fdf3 (considering in C++ int types occupies 4 bytes of memory).

Considering the variable n = 44, the representation looks like:

memory3

According to Prinz & Crawford, 2006, “a pointer is a reference to a data object or a function. Pointers have many uses: defining “call-by-reference” functions, and implementing dynamic data structures such as chained lists and trees, to name just two examples.”

Basically in C++ you can declare a pointer using the following syntax:

int *iPointer; // this line declares iPointer as a pointer to int

In declarations, the asterisk (*) means “pointer to.” (Prinz & Crawford, 2006).

What happens with a pointer, is that you may reference the same area of the memory to the address, and so you are able to use the same area of the memory with a different variable, or even passing the reference, which will simply means you are working with the same area of the memory.

If you want a pointer to point to another area of the memory, you just need to use the &, which means “reference to”

iPointer = &iVariable;

The code above give the instruction of the variable iPointer to reference the area of memory of &iVariable.

POINTERS IN JAVA

Java is intended for writing programs that must be reliable in a variety of ways. According to Horstmann and Cornell, 2008, “Java puts a lot of emphasis on early checking for possible problems, later dynamic (runtime) checking, and eliminating situations that are error-prone”. One of the big differences between Java and C++ is that Java has a pointer model that eliminates the possibility of overwriting memory and corrupting data, taking off the power of the programmer in making mistakes what results in a more security and efficient programming language.

That means you cannot explicitly point to another area of the memory in Java, on the other hand there are ways which you can reference objects in Java, taking advantage of the same instance in memory, however by using the language standards.

REFERENCES IN JAVA

Object instances in Java are stored in the memory of the Java Virtual Machine. For instance, when declaring the variable car below and making a new instance of the object, as seen below, a new reference in the memory will be allocated to store this object.

Car car = new Car();

In the case, of referencing the same object, as below:

Car car2 = car;

The reference to the car will be shared, and so, both car and car2 will point to the same area in the memory. This is the basically the way the Java programming language implements referencing.

CONCLUSION

Pointers are a powerful resource programmers may use to take advantage of many resources, however, the responsibility of dealing with the computer memory directly is not a resource a language which looks to be simple and security may implement. In my point of view, for languages such as C and C++, pointers and references are trivial. However, considering the kind of application Java looks to provide and implement, which are mostly Enterprise and final user applications, the resource of having direct access and control over the memory is not crucial and may lead to more secure and stable applications.

REFERENCES

Hubbard, J. R., 2000. Programming with C++. 2nd ed. USA: McGraw-Hill.

Prinz & Crawford, 2006. C in a Nutshell. 1st ed. California, USA: O’Reilly Media.

Horstmann & Cornell, 2008. Core Java – Volume 1 fundamentals. 8th ed. California, USA: Sun Microsystems Press.

The Java vs Ruby Programming Languages

INTRODUCTION

The main objective of this small article is to introduce the Java and Ruby programming languages, starting by a bit of history, the language characteristics, comparison between the two programming languages and to finish, a conclusion.

THE JAVA PROGRAMMING LANGUAGE

Java is a very similar language to C and C++, therefore with a huge difference: it was made to be platform independent (you may possibly heard of the slogan “write once, run anywhere”). The Java Technology project lead by James Gosling in the early 1990s, was a tech project which was looking to control electronic devices such as TV and cell phones. The first name was Oak, and after some years the name was changed to Green and afterward Java, the famous name which is kept until today. (Sanchez & Canton, 2002).

Computers just operate code inputs which are commands given to the machine to tell it what do do, so if you consider a machine just operate with codes, how does a computer operate? The answer is basically with programmed code, which is written in a specific language by a software developer or engineer. Java is a high-level programming language, which means it is closer to a natural language (such as English), different from the machine language which is noted with 0s and 1s, or if your prefer, the binary system. (Russell, J. P, 2001).

Some of the characteristics of the Java Programming Language are:

  • Platform-independent;

  • Object-oriented;

  • Multi-threaded;

  • It has no pointers;

  • Automatic memory management, also called Garbage Collector;

  • It doesn’t support multi-inheritance;

  • Exception handling.

THE RUBY PROGRAMMING LANGUAGE

Ruby is a multi-platform interpreted language, very similar to Pearl and Python. Its syntax at first sight may look like Pascal, and it is a pure object oriented language. The language was created by Yukihiro Matsumoto (a.k.a Matz), and it was first released in 1999 (Collingbourne, H., 2011).

Some of the characteristics of the Ruby Programming Language are:

  • Simple syntax;

  • Pure” Object-Oriented Language;

  • Operator overloading;

  • Exception handling;

  • Iterators and closures;

  • Garbage collection;

  • Multi-platform.

COMPARING JAVA VS RUBY

The table below show some of the features the Java Language has versus some of the features the Ruby language has. There it follows:

JAVA

RUBY

SIMPLE SINTAX

X

EXCEPTION HANLDING

X

X

MULTI-PLATFORM

X

X

COMPILED

X

GARBE COLLECTOR

X

X

STRONG TYPED

X

X

OPERATOR OVERLOADING

X

100% OBJECT ORIENTED

X

DYNAMIC TYPED

X

Table 1 Comparison of the Java and the Ruby Programming Languages.

CONCLUSION

I personally believe both Java and Ruby are both modern programming languages. In spite of Ruby appear to support more dynamic features and look simpler / modern, Java is still one of the most reliable technologies in terms of security, scalability and it widely known as a very robust technology. Today, billions of devices run Java though the Android platform and also millions of frameworks are available at the Java community in order to provide resources for developers to do not need to “reinvent the wheel”.

REFERENCES

SANCHEZ & CANTON, 2002. Java programming for engineers. 1st ed. Florida, USA: CRC Press LLC.

Russell, Joseph P., 2001. Java Programming for the absolute beginner. 1st ed. California, USA: Prima Tech.

Collingbourne, H, 2011. The book of Ruby : a hands-on guide for the adventurous. 1st ed. California, USA: Starch Press.

Bring your own Device

INTRODUCTION

The objective of this small article is to give an introduction about the BYOD – Bring Your Own Device concept, analyze advantages and disadvantages of using this model and my personal insight about the subject.

WHAT IS BYOD?

BYOD is an acronym for Bring Your Own Device, which is basically a new concept where the employee of a company bring their own devices to work. This is defined by IBM as “an IT policy where employees are allowed or encouraged to use their personal mobile devices—and, increasingly, notebook PCs—to access enterprise data and systems.” (IBM, 2016). This may be achieved by a company providing aid to the costs or the employee to provide their own resources.

ADVANTAGES OF BYOD

  • Employers may feel more comfortable and even more productive since he has a very nice feeling of comfort using their own devices;

  • Costs are reduced and machines are used;

DISADVANTAGES OF BYOD

  • Support is always a challenge, since many kinds of devices will need different approaches;

  • Security is the most challenging thing when using this (this is stated in the following section);

SECURITY CONCERNS IN BYOD

According to CRN.com, 2016, the 10 top security concerns using BYOD are:

  • Jail Braking are Rooted devices are threats to security;

  • Restrictions can be bypassed – Access to the corporation data;

  • Vulnerable software – Users may use outdated software;

  • Open access to wireless access points;

  • Open access to e-mail;

  • Adware and Spyware are threats to network and the company;

  • Too many permissions;

  • Cloud drives may lead to data leaks (Dropbox, OneDrive);

  • Android malware is rising and the platform is becoming more unsecure;

  • Devices can be lost or stolen;

CONCLUSION

Technology is changing, people are changing and one of the key things of BYOD is Green IT. I personally believe the use of resources must be optimized in such manner we have more sensibility for our natural resources and also the way the financial resources are spent in thousands of computers and the waste of resources. The subject of removing the responsibility of the company to provide devices for the users, is a bit more complicated, however if we think about resources optimization, this can be good strategy.

REFERENCES

IBM BYOD – Bring Your Own Devices. 2016. IBM. [ONLINE] Available at: http://www.ibm.com/mobilefirst/us/en/bring-your-own-device/byod.html. [Accessed 22 February 2016].

Top 10 BYOD Risks Facing The Enterprise. CRN. [ONLINE] Available at: http://www.crn.com/slide-shows/security/240157796/top-10-byod-risks-facing-the-enterprise.htm/. [Accessed 22 February 2016].

Security in Social Media

INTRODUCTION

The objective of this is small article is to reflect and give a point of view of who is responsible for the information from the social media, analyze who owns data, what people must me aware of sharing, implications and a conclusion for the subject and the reflections given.

WHO OWNS THE INFORMATION

Every day millions of people share their information in social network websites and the question that comes out is, who owns the information shared?

Instagram is a good example to use. This is stated that:

People in the Instagram community own their photos, period. On the platform, if someone feels that their copyright has been violated, they can report it to us and we will take appropriate action. Off the platform, content owners can enforce their legal rights.” (The Washington Post, 2015).

That means, it someone copy your pictures on the platform, you can ask support or rights, but if someone steal your pictures and use off the platform, Instagram not really can help you, and you should look for your rights on your own.

instagram-480x300

Figure 1 Instagram data exposed to an exhibition (The Washington Post, 2015)

SECURITY OF THIS INFORMATION

The question of data security in social networks is a point which needs to be cared carefully, specially because there are thousands of sensible data and this information is really valuable and sensible.

People just need to be aware that what is posted on the internet will be stored forever. One good example of that is the Internet Wayback Macine, which stores billions of internet pages over years and years (The Internet Wayback Machine, 2016).

google-480x300

Figure 1 Google WebPage in 1999 (The Internet Wayback Machine, 2016).

CONCLUSION

People need to be careful with what is shared on the internet. As the instagram examples given, there are uncountable amount of data which very relevant and important from users, and everyone need to be aware of what is happening on the internet today.

REFERENCES

A reminder that your Instagram photos aren’t really yours. 2016. The Washington Post. [ONLINE] Available at: https://www.washingtonpost.com/news/arts-and-entertainment/wp/2015/05/25/a-reminder-that-your-instagram-photos-arent-really-yours-someone-else-can-sell-them-for-90000/. [Accessed 21 February 2016].

Internet Archive: Wayback Machine. 2016. Internet Archive: Wayback Machine. [ONLINE] Available at: https://archive.org/web/. [Accessed 21 February 2016].

Personal Information and Privacy on the Internet today

INTRODUCTION

The main objective of this small article is to give my point of view on internet privacy and stolen information.

PERSONAL DATA AND INFORMATION

This is not new for a computer professional that conversations and information can be stolen on many ways which may be using technical flaws, the insecurity of the internet protocols, networks resources, and others.

The revelation of Edward Snowden of people being monitored by the CIA and NSA, brought up to the internet users, the alert of being aware of what is shared on the internet. Edward Snowden considered one of the most extraordinary delators of the History. Never before someone revealed such quantity of secret files of the more powerful intelligence institution of the world, in order to make it public. And that is what he did (Harding, 2014).

WAYS TO STORE DATA

Today, there are many ways of storing such big quantity of information about users and make it to use with business intelligence, data mining and many others techniques. The list below shows some of them:

  • Hadoop: It is an open-source software framework for storing data and running applications on clusters of commodity hardware. It provides massive storage for any kind of data, enormous processing power and the ability to handle virtually limitless concurrent tasks or jobs” (SAS, 2016).

  • NoSQL Databases: A new way of storing data in a document oriented, key/value or graphs models. This new database paradigm brings the possibility of storing high quantity of data and information using a horizontal approach in instead of verticalization, which is very common in relational databases (Sadalage, 2012).

WHO CAN AND HOW INFORMATION CAN BE ACCESSED

The confidentiality of stored user information and who can access it is very sensible. There are thousands of robots running on the internet today and getting many information from websites. You may one day received an unknown contact request on skype or facebook, I personally believe this is one way of the robots to access your personal information and store in pirate databases, which may be used for privilege of others.

In spite of sensible data to be guaranteed by big corporations such as Facebook and Google, for instance, there is always the possibility of this data to be stolen and published or kept with hackers and bad intentioned people.

CONCLUSION

Today, we need to be careful with what kind of data we share on the internet, be very careful with sensible information and beware of unknown contacts and relationships on the internet. I recommend people to usually change credit card numbers and do not make it available personal account data on untrusted websites.

REFERENCES

Harding, L., 2014. The Snowden Files. 1st ed. London: The Guardian Books.

What is Hadoop?. 2016. SAS. [ONLINE] Available at: http://www.sas.com/en_us/insights/big-data/hadoop.html. [Accessed 14 February 2016].

Sadalage, P. J., 2012. NoSQL Distilled. 1st ed. USA: Addison-Wesley.

Introduction to Datamining

INTRODUCTION

The main objective of this small article is to introduce data mining, why this is a key concept in database systems, types of data mining, patterns in data mining and at the end, a conclusion.

DATA MINING

Data mining technique basically discovery patterns to identify in collections of data (Brookshear, 2012). Basically it is used in data base systems to identify patterns in relations of the domain and the tables / data stored. It is simply defined by Zaki and Meira Jr., as “Data mining is the process of discovering insightful, interesting, and novel patterns, as well as descriptive, understandable, and predictive model s from large-scale data”.

In order to achieve data mining goals, static data collections (copies of databases and data) are used and called data warehouses, which does not operate with constant updates a.d to record new information such as in regular databases. Data warehouses are simply snapshots of collections of databases or a single database (Brookshear, 2012).

According to Han “data mining has been treated as a popular synonym to knowledge discovery in databases, although some researchers view data mining as an essential step in knowledge discover. In general a knowledge discovery process consists of an interactive sequence of the following steps:

  • Data cleaning: which handles noisy, erroneous, missing or irrelevant data;

  • Data integration: where multiple, heterogeneous data sources may be integrated into one;

  • Data selection, where data relevant to the analysis task are retrieved from the database;

  • Data mining, which is an essential process were intelligent methods are applied in order to extract data and patterns;

  • Pattern evaluation: Which is to identify the truly interesting patterns representing knowledge based on some interestigness measures;

  • Knowledge presentation: Where visualization and knowledge representation techniques are used to the mined knowledge to the user;”

(Han, 2006).

FORMS OF DATA MINING

Forms of data mining are described by Brookshear are defined by Han, as:

  • Class description: provides a concise and succinct summarization of a collection of data and distinguish from others.

  • Association: Association is the discovery of association relationships and correlations among a set of items.

  • Classification: Classification analyzes a set of training data (i.e., a set of objects whose class label is known) and constructs a model for each class based on the features in the data.

  • Prediction: This mining function predicts the possible values of some missing data or the value distribution of certain attributes in a set of objects.

  • Clustering analysis is to identify clusters embedded in the data, where a cluster is a collection of data objects that are “similar” to one another.

  • Time-series analysis: Time-series analysis is to analyze large of time series data to find certain regularities and interesting characteristics.

CONCLUSION

With large amounts of data and the wide spread of computers, internet and communications will always make technologies and techniques to support data mining key topics in computer science. The use of data mining to improve business operations and to extract data in such way which may help our world to be a better place can be considered a very important topic in the last decade and during today.

REFERENCES

J. Han. 2016. Data Mining. [ONLINE] Available at: http://web.engr.illinois.edu/~hanj/pdf/ency99.pdf. [Accessed 13 February 2016].

Brooshear, J. G., 2012. Computer Science: An Overview. 11th ed. USA: Addison-Wesley.

Zaki, M. J., 2014. Data Mining and Analysis. 1st ed. New York: Cambridge Press.

Introduction to the Queue and Stack data structures

INTRODUCTION

The main objective of this is small article is to introduce data structures in the computer programming space, and give an introduction and details about the queue and the stack data structures.

DATA STRUCTURES

A very simple definition of data structure is: ways of organize and store data in computers. The concept of data structures exists since computers exist, and obviously a concept which is kept over the years and implemented in the programming languages. This article will present stack and queues as abstract data models (ADT), in other words, just presenting the concepts as a mathematical or a logical data model (MyCodeSchool, 2013).

STACK

Stacks implements the LIFO concept of the last item put in the stack is the first one to be picked off the stack. A stack operates basically with three operations: PUSH, POP and STACK-EMPTY. The PUSH operation basically puts an item at the last position of the stack, the POP operation basically pick off the top of the stack. STACK-EMPTY is used to check whether the stack is empty or not (Cormen, 2009).

Real world examples: Stack of dinner plates.

Complexity: Each operation takes: O(1) time.

QUEUES

Queues implements the FIFO concept of the first item put in the queue is the first one to be picked off the queue – this operations are called ENQUEUE and DEQUEUE. A queue operates basically with two operations: ENQUEUE and DEQUEUE. The ENQUEUE operation basically puts an item at the first position of the queue, the DEQUEUE operation basically pick it off. (Cormen, 2009).

Real world examples: A queue is very similar to a line, which customers are waiting to pay a bill.

Complexity: Each operation takes: O(1) time.

USAGE OF QUEUES AND STACKS

A good point to use a queue in an implementation of an operating system, would be the processes which are waiting to be processed in order. Let’s suppose a notification system in an operating system, for the user, it would be nice to have the first notifications coming out earlier than the last ones. On the other hand, considering a stack, program thread it would be good if the last item pushed to the stack to be the first one to be popped out. “When a program begins executing in the function main(), space is allocated on the stack for all variables declared within main(). If main() calls a function, func1(), additional storage is allocated for the variables in func1() at the top of the stack.” (University of Hawai, 1993).

REFERENCES

Cormen, T.H, 2009. Introduction to Algorithms. 3rd ed. Massachusetts: The MIT Press.

Data structures: Introduction to stack – MyCodeSchool@YouTube. 2016. Data structures: Introduction to stack – YouTube. [ONLINE] Available at: https://www.youtube.com/watch?v=F1F2imiOJfk. [Accessed 07 February 2016].

University of Hawai. 1993. Programming in C. [ONLINE] Available at: http://www-ee.eng.hawaii.edu/~tep/EE160/Book/chap14/subsection2.1.1.8.html. [Accessed 07 February 16].