<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aakalker</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Aakalker"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Aakalker"/>
	<updated>2026-06-06T10:12:22Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56290</id>
		<title>CSC/ECE 517 Fall 2011/ch18 6d na</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56290"/>
		<updated>2011-11-27T01:29:36Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: /* Limitations of Agile Methodologies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''The Agile Landscape'''===&lt;br /&gt;
---------------------&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Overview ==&lt;br /&gt;
Traditional software development methodologies like waterfall methodology are notorious for their lack of flexibility and slowness. That’s why today traditional development methodologies are often replaced by agile development methodologies, which accelerate the process of software development and allow quicker project finalization. Agile software development methodologies give a chance to step away from bureaucracy and strike a balance between laissez-faire [http://en.wikipedia.org/wiki/Laissez-faire] style and immersion into paper work.&lt;br /&gt;
&lt;br /&gt;
==Introduction to Agile Software Development==&lt;br /&gt;
Agile Software Development is a concept, a philosophy and a methodology which evolved in the 90's as an answer to the long-growing frustrations of the waterfall Software Development Life Cycle [SDLC] [http://en.wikipedia.org/wiki/Systems_development_life-cycle]concepts. The term promotes an iterative approach to software development using shorter and lightweight development cycles and some deliverable.&lt;br /&gt;
&lt;br /&gt;
After extensive research, we have found that like other resources, the term Agile as it relates to modern software development, was being used during the 1990's in various published articles both on the internet as well as ComputerWorld/InfoWorld. The papers were based on people looking for a new approach to software process. While the ideas were not new, they gained enough steam for people to pay close attention especially while search engines on the internet became very popular. There is another alliance called the Agile Manifesto, which in our opinion, is a disorganized web site that has some claims to doctrines and philosophies, all borrowed and bastardized to look like an original concept. The web producer put a picture from a meeting in SnowBird to resemble the framers of the constitution and the Declaration of Independence. They then hijacked the term 'Agile' in early 2001 when a bunch of people who had been heavily involved in the Agile concepts got together to exchange ideas and came up with the Manifesto for Agile Software Development.&lt;br /&gt;
&lt;br /&gt;
[[File:AgileDevelopmentna.png]]&lt;br /&gt;
&lt;br /&gt;
The Agile workshop was organized, by Jim Highsmith [http://en.wikipedia.org/wiki/Jim_Highsmith] and Bob Martin[http://en.wikipedia.org/wiki/Robert_Cecil_Martin]. They contacted people who they felt were actively involved in software development communities with these similar ideas and got seventeen of them together for the Snowbird workshop. Initially, they wanted to get together and build better understanding of each others' approaches. Robert Martin was keen to get some statement, a manifesto that could be used to rally the industry behind these kinds of techniques. We also decided we wanted to choose a name to act as an umbrella name for the various approaches. One next step that did follow, with the active involvement of many of these authors, was the formation of the agile alliance. This group is a non-profit group intended to promote and research agile methods. Amongst other things it sponsors an annual conference in the US.&lt;br /&gt;
&lt;br /&gt;
===Agile Manifesto===&lt;br /&gt;
Manifesto for Agile Software development&lt;br /&gt;
&lt;br /&gt;
We are uncovering better ways of developing software by doing it and &lt;br /&gt;
helping others do it. Through this work we have come to value: &lt;br /&gt;
&lt;br /&gt;
'''Individuals and interactions''' over processes and tools&lt;br /&gt;
&lt;br /&gt;
'''working software''' over comprehensive documentation &lt;br /&gt;
&lt;br /&gt;
'''customer collaboration''' over contract negotiation&lt;br /&gt;
&lt;br /&gt;
'''responding to change''' over following a plan&lt;br /&gt;
&lt;br /&gt;
That is, while there is value in the items on the right, &lt;br /&gt;
we value the items on the left more.&lt;br /&gt;
&lt;br /&gt;
===Agile planning activities===&lt;br /&gt;
In non-iterative methodologies like waterfall, there is large upfront design, aiming to predict accurately how much work is involved in each project activity. This leads to a significant investment early in the project, when it is uncertain that the designed functionality is actually desired. Any agile approach to large-scale development has to avoid the reintroduction of the big design up front. One solution is to incorporate levels of planning incorporate a view of ‘the whole.' Agile planning activities for large-scale development efforts should rely on these five levels.&lt;br /&gt;
&lt;br /&gt;
'''Level 1''' - Product Visioning:&lt;br /&gt;
The highest-level view that the stakeholder can paint of the future is the product vision. In this vision, they explain what an organization or product should look like after project completion. They indicate what parts of the system need to change and what efforts can be used to achieve this goal.&lt;br /&gt;
&lt;br /&gt;
'''Level 2''' - Product Roadmap:&lt;br /&gt;
The era of large-scale projects that deliver results in years is behind us. Customers demand faster frequent changes, and delivery is measured in weeks or months. The higher frequency and smaller time-frames force a product owner into thinking in steps - into thinking of a road towards the final product. A product roadmap is created and communicated to fellow delivery people to provide a map so concept is more of a reality.&lt;br /&gt;
&lt;br /&gt;
'''Level 3''' - Release Planning:&lt;br /&gt;
In small projects, the product backlog can provide adequate project overview. The size, duration and deliverables are easily recognized, and there is no need to synchronize deliverables or teams. All of this changes when applying agile concepts to programs. The first time when routing activities and allocating them to teams occurs during release planning.&lt;br /&gt;
&lt;br /&gt;
'''Level 4''' - Iteration Planning:&lt;br /&gt;
For each iteration within the release, a planning session occurs to append detail and increase accuracy. Before or during the session, detail is added to the features by breaking them down into tasks. The actual capacity of the individual teams is known with more certainty than during the release planning session. The combination of these increased accuracies helps the team commit to delivering a number of features during the iteration with a high degree of certainty.&lt;br /&gt;
&lt;br /&gt;
'''Level 5''' - Daily Plan:&lt;br /&gt;
The stand-up meeting is part of everyday life for agile teams. This daily meeting is not often seen as a planning session, but it certainly is. The people look a day ahead, have learned from the earlier days in the iteration, and tell each other what they plan on doing. Issues are raised, possibly addressed, and the success of delivering the desired features within the iteration can be determined after the meeting.&lt;br /&gt;
&lt;br /&gt;
==Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
Scrum is a lightweight management framework with broad applicability for managing iterative and incremental projects of all types. Ken Schwaber[http://en.wikipedia.org/wiki/Ken_Schwaber], Mike Beedle[http://en.wikipedia.org/wiki/Mike_Beedle], Jeff Sutherland[http://en.wikipedia.org/wiki/Jeff_Sutherland] and others contributed significantly to the evolution of Scrum over the last decade and a half. Over the last few years in particular, Scrum has garnered increasing popularity in the software community due to its simplicity, proven success and improved productivity, and its ability to act as a wrapper for various engineering practices promoted by other agile methodologies.[http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology]&lt;br /&gt;
&lt;br /&gt;
===Extreme Programming===&lt;br /&gt;
XP, originally devised by Kent Beck[http://en.wikipedia.org/wiki/Kent_Beck], has emerged as one of the more popular and controversial agile methods. XP is a disciplined approach to delivering high-quality software quickly and continuously. It promotes high customer involvement, rapid feedback loops, continuous testing, continuous planning, and close teamwork to deliver working software at very frequent intervals, typically every 1-3 weeks.&lt;br /&gt;
The original XP recipe is based on four simple values – simplicity, communication, feedback, and courage – and twelve supporting practices: Planning Game, Small Releases, Customer Acceptance Tests, Simple Design, Pair Programming, Test-Driven Development, Refactoring, Continuous Integration, Collective Code Ownership, Coding Standards, Metaphor and Sustainable Pace.[http://www.extremeprogramming.org/]&lt;br /&gt;
&lt;br /&gt;
===Dynamic Systems Development Method (DSDM)===&lt;br /&gt;
DSDM, dating back to 1994, grew out of the need to provide an industry standard project delivery framework for what was referred to as Rapid Application Development (RAD) at the time. While RAD was extremely popular in the early 1990’s, the RAD approach to software delivery evolved in a fairly unstructured manner. As a result, the DSDM Consortium was created and convened in 1994, with the goal of devising and promoting a common industry framework for rapid software delivery. Since 1994, the DSDM methodology has evolved and matured to provide a comprehensive foundation for planning, managing, executing, and scaling agile and iterative software development projects.&lt;br /&gt;
DSDM is based on nine key principles that primarily revolve around business needs/value, active user involvement, empowered teams, frequent delivery, integrated testing, and stakeholder collaboration. DSDM specifically calls out “fitness for business purpose” as the primary criteria for delivery and acceptance of a system, focusing on the useful 80% of the system that can be deployed in 20% of the time.[http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html]&lt;br /&gt;
&lt;br /&gt;
===Crystal===&lt;br /&gt;
The Crystal methodology is one of the most lightweight, adaptable approaches to software development. Crystal is actually comprised of a family of methodologies (Crystal Clear, Crystal Yellow, Crystal Orange, etc.) whose unique characteristics are driven by several factors such as team size, system criticality, and project priorities. This Crystal family addresses the realization that each project may require a slightly tailored set of policies, practices, and processes in order to meet the project’s unique characteristics.[http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html]&lt;br /&gt;
&lt;br /&gt;
===Lean Software Development===&lt;br /&gt;
Lean Software Development is an iterative methodology originally developed by Mary and Tom Poppendieck. Lean Software Development owes much of its principles and practices to the Lean Enterprise movement and the practices of companies like Toyota. Lean Software Development focuses the team on delivering value to the customer, and on the efficiency of the &amp;quot;Value Stream,&amp;quot; the mechanisms that deliver that value. The main principles of Lean include Eliminating Waste, Amplifying Learning, Deciding as Late as Possible, Delivering as Fast as Possible, Empowering the Team, Building Integrity In, and Seeing the Whole.&lt;br /&gt;
Lean eliminates waste by selecting only the truly valuable features for a system, prioritizing those selected, and delivering them in small batches. It emphasizes the speed and efficiency of development workflow, and relies on rapid and reliable feedback between programmers and customers.[http://www.projectperfect.com.au/info_lean_development.php]&lt;br /&gt;
&lt;br /&gt;
===Feature Driven Development (FDD)===&lt;br /&gt;
FDD was originally developed by Jeff De Luca, with contributions by M.A. Rajashima, Lim Bak Wee, Paul Szego, Jon Kern and Stephen Palmer. The first incarnations of FDD occurred as a result of collaboration between De Luca and OOD thought-leader Peter Coad. FDD is a model-driven, short-iteration process. It begins with establishing an overall model shape. Then it continues with a series of two-week &amp;quot;design by feature, build by feature&amp;quot; iterations. The features are small, &amp;quot;useful in the eyes of the client&amp;quot; results.&lt;br /&gt;
FDD designs the rest of the development process around feature delivery using the following eight practices: Domain Object Modeling, Developing by Feature, Component/Class Ownership, Feature Teams, Inspections, Configuration Management, Regular Builds, Visibility of Progress and Results.[http://www.nebulon.com/fdd/]&lt;br /&gt;
&lt;br /&gt;
===Other Methodologies===&lt;br /&gt;
Kanban [http://applicationengineering.blogspot.com/2009/06/kanban-agile.html] as applied to software development is a pull-based planning and execution method.  Rather than planning work items up front and pushing them into the work queue of a team, the team signals when they are ready for more work and pulls it into their queue. &lt;br /&gt;
Kanban historically uses cards to signal the need for an item.  For software development teams, these cards are kept on a Kanban Board which is organized into columns and rows.  The columns represent the different states of a work item, from initial planning through customer acceptance.  The specific columns a team uses should meet the needs of the team and be tailored to their context.  The rows on the Kanban Board represent work items.  Work items are sometimes grouped within areas, such as feature sets and category types.&lt;br /&gt;
Kanban focuses on maximizing the throughput of a team.  One of the ways it achieves this goal is through the application of Work-in-Process (WIP) limits in each of the states of a work item.  Under a Kanban (or Lean) approach, queues or inventories of work in any state are seen as waste.  The WIP limits enable a team to focus on the optimal flow of work items through the system, minimizing any associated waste.  Kanban allows teams to achieve process optimizations while respecting and maintaining a sustainable pace.&lt;br /&gt;
&lt;br /&gt;
==Comparison of different agile methodologies==&lt;br /&gt;
&lt;br /&gt;
[[File:Agile_comp.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Limitations of Agile Methodologies===&lt;br /&gt;
The biggest limitation of agile methodologies is how they handle larger teams. Agile researchers conclude that “Agile development is more difficult for larger team, as size grows coordinating interfaces become a dominant issue,”. &lt;br /&gt;
&lt;br /&gt;
Agile methodologies have a strong emphasis on customer involvement. The customer is considered as part of the development team throughout the whole development of the software. The Standish Group research topped this by providing the second most important factor for a project success is user involvement according to IT executive mangers opinion. According to Boehm, “Agile methods work best when such customers operate in dedicated mode with the development team, and when their tacit knowledge is sufficient for the full span of the application”. Again these methods risk tacit knowledge shortfall. If you have one customer participant then unless they are committed, knowledgeable, collaborative and empowered then there is some chance that you would have a unified set of requirements. However if you have many customers you would have different viewpoints and conflicts between them. This risk could be reduced in plan-driven methods by using documentation, planning, architecture reviews and independent expert project reviews to compensate for on-site customer negligence.&lt;br /&gt;
&lt;br /&gt;
Another factor of agile methodologies that could cause problems is the interpretation of the agile manifesto principle, “Working Software over Comprehensive Documentation”. Boehm[http://en.wikipedia.org/wiki/Barry_Boehm] questions the applicability of agiles’ emphasis on simplicity. Based on XP’s concept of YAGNI precept: “You Aren’t Going to Need It,” believes that doing extra work to get rid of architectural features that do not support the current version. This might cause misconceptions for the developers. This approach can be useful when the future requirements are highly unpredictable. However where future requirements are predictable, Boehm states “this practice not only throws away valuable architecture support for them, it also creates problems with the customers who want developers to believe that their priorities and evolution requirements are worth accommodating”.[http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf]&lt;br /&gt;
&lt;br /&gt;
==Adoption and Effectiveness of Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
'''Small team'''&lt;br /&gt;
-&lt;br /&gt;
Agile teams are restricted in size for several reasons:&lt;br /&gt;
The team has to self-organize, implying an efficient order emerging from&lt;br /&gt;
temporary chaos. Obviously this process would be too long for larger teams.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members have to be able to communicate spontaneously with each other&lt;br /&gt;
and with other stakeholders (i.e. without setting up meetings, sending emails,&lt;br /&gt;
etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
All team members participate in the day-to-day management (tasks, changes,&lt;br /&gt;
impediments, etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members need to understand what others are doing (cross-functional&lt;br /&gt;
perspective, team ownership), help each other with ease, and collaborate without&lt;br /&gt;
centralized control.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
The team has to be co-located (this limitation will be examined later).&lt;br /&gt;
As you can see, agile is a highly participative style of software development.&lt;br /&gt;
Therefore, the number of participants significantly affects the efficiency of the process.&lt;br /&gt;
The daily scrum of the Scrum agile methodology perfectly illustrates this limitation. The&lt;br /&gt;
daily scrum is a 15 minutes meeting involving the whole team. The ScrumMaster (Scrum&lt;br /&gt;
word for team leader) goes around the table and each team member mentions the status&lt;br /&gt;
of tasks and other issues such as impediments or changes. I managed Scrum teams of&lt;br /&gt;
sizes varying from 3 to 8, and I must admit that in my opinion 8 is about the upper limit.&lt;br /&gt;
Beyond this size, communication becomes inefficient.&lt;br /&gt;
Assuming that large projects tend to require large teams, this restriction naturally&lt;br /&gt;
extends to project size.&lt;br /&gt;
&lt;br /&gt;
'''Collocated team'''&lt;br /&gt;
&lt;br /&gt;
Agile emphasizes that face-to-face, spontaneous conversation is the best form of&lt;br /&gt;
communication. While we can certainly agree on the benefits of this form of&lt;br /&gt;
communication, it severely limits agile applicability. Moreover, this agile principle extends&lt;br /&gt;
beyond the development team since other stakeholders such as business analysts are&lt;br /&gt;
required to be collocated.&lt;br /&gt;
What does it mean in practice? Imagine that a team member has a question concerninga use case. She should be able to get up, walk 10 meters, ask the business analyst orkey user for clarification, and get back to work. Consequently, office space has to bephysically arranged according to agile projects so that all stakeholders involved in dailyactivities are located at the same place (let's say within a minute of walking distance).&lt;br /&gt;
We can easily think of a number of situations where this limitation prevents using agile:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Office space organized by departments: In most organizations, offices are&lt;br /&gt;
organized by departments such as IT, marketing, accounting, sales, and so on.&lt;br /&gt;
Moving people around according to agile projects is unrealistic. Even if it was&lt;br /&gt;
possible, it would negatively affects other parts of the business.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Distributed environment: Developers are often distributed throughout the&lt;br /&gt;
organization, whether in the same branch or in different branches (or working&lt;br /&gt;
from home). Just like for the previous point, moving these people is unrealistic.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Subcontracting: Many organizations partly or completely outsource software&lt;br /&gt;
development. Assuming that some roles such as business analysts or key users&lt;br /&gt;
would be located at the company, this situation doesn't comply with the agile&lt;br /&gt;
collocation principle.&lt;br /&gt;
&lt;br /&gt;
'''Team ownership vs. individual accountability'''&lt;br /&gt;
&lt;br /&gt;
Agile development stresses the importance of team ownership in order to improve&lt;br /&gt;
teamwork and therefore overall results. Team ownership is a very appealing concept,&lt;br /&gt;
but how can we implement it since an organization's performance-reward system&lt;br /&gt;
assesses individual performance and rewards individuals, not teams?&lt;br /&gt;
&lt;br /&gt;
If we rely exclusively on individual accountability, we tend to generate selfish behavior&lt;br /&gt;
that can affect teamwork. If we rely exclusively on team assessment, we overlook that&lt;br /&gt;
individuals perform differently in a given team, creating opportunities for underperforming&lt;br /&gt;
team members to get away with it and lessening incentives to perform in a superior way.&lt;br /&gt;
Obviously we have to find a way to take both these perspectives into account.&lt;br /&gt;
Actually this problem can be solved elegantly by defining two levels of performance-&lt;br /&gt;
reward:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team level: The team is perceived as a single entity from management's point of&lt;br /&gt;
view. Management assesses teams' performance and allocates rewards to&lt;br /&gt;
teams in the form of points.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Individual level: Team leaders (or whatever the title is) evaluate teams&lt;br /&gt;
members rewarding them with points.&lt;br /&gt;
In order to have a short feedback loop, assessment should be done frequently (every&lt;br /&gt;
month for example) using a lightweight system incurring very little administrative&lt;br /&gt;
overhead.&lt;br /&gt;
&lt;br /&gt;
Thanks to this kind of system, we encourage teamwork but we still take individual&lt;br /&gt;
contribution into account, effectively reaching a balance between team ownership and&lt;br /&gt;
individual accountability.[http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf]&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Agile software development stresses rapid iterations, small and frequent releases, and evolving requirements&lt;br /&gt;
facilitated by direct user involvement in the development process. Serena’s application lifecycle management&lt;br /&gt;
tools provide a framework to visualize scope, orchestrate mundane and repetitive development tasks, and&lt;br /&gt;
enforce process. Unlike agile-specific products offered by agile-only vendors, Serena products are methodologyneutral&lt;br /&gt;
and can be applied equally well to agile as well as more traditional serial development processes, so&lt;br /&gt;
they can support all the development activities within an enterprise.&lt;br /&gt;
&lt;br /&gt;
Any team could be agile, regardless of the team size, but size is an issue because more people make&lt;br /&gt;
communication harder. There is much experience from small teams. There is less for larger teams, for&lt;br /&gt;
which scale-up strategies need to be applied.&lt;br /&gt;
&lt;br /&gt;
• Experience is important for an Agile project to succeed, but experience with actually building systems&lt;br /&gt;
is much more important than experience with Agile methods. It was estimated that 25%-33% of the&lt;br /&gt;
project personnel must be “competent and experienced”, but the necessary percentage might even be as&lt;br /&gt;
low as 10% if the teams practice pair programming due to the fact that they mentor each other.&lt;br /&gt;
&lt;br /&gt;
• Reliable and safety-critical projects can be conducted using Agile Methods. The key is that performance&lt;br /&gt;
requirements are made explicit early, and proper levels of testing are planned. It is easier to address&lt;br /&gt;
critical issues using Agile Methods since the customer gives requirements, makes important&lt;br /&gt;
things explicit early and provides continual input.&lt;br /&gt;
&lt;br /&gt;
• Agile Methods require less formal training than traditional methods. Pair programming helps minimize&lt;br /&gt;
what is needed in terms of training, because people mentor each other. This is more important than&lt;br /&gt;
regular training that can many times be completed as self-training. Training material is available in particular&lt;br /&gt;
for XP, Crystal, Scrum, and FDD.&lt;br /&gt;
&lt;br /&gt;
• The three most important success factors are culture, people, and communication. Agile Methods need&lt;br /&gt;
cultural support otherwise they will not succeed. Competent team members are crucial. Agile Methods&lt;br /&gt;
use fewer, but more competent people. Physically co-located teams and pair programming support&lt;br /&gt;
rapid communication. Close interaction with the customer and frequent customer feedback are critical&lt;br /&gt;
success factors.&lt;br /&gt;
&lt;br /&gt;
• Early warning signs can be spotted in Agile projects, e.g. low morale expressed during the daily meeting.&lt;br /&gt;
Other signs are production of “useless documentation” and delays of planned iterations.&lt;br /&gt;
&lt;br /&gt;
• Refactoring should be done frequently and of reasonably sized code, keeping the scope down and local.&lt;br /&gt;
Large-scale refactoring is not a problem, and is more feasible using Agile Methods. Big architectural changes do not&lt;br /&gt;
need to be risky if a set of automated tests is maintained.&lt;br /&gt;
&lt;br /&gt;
• Documentation should be assigned a cost and its extent be determined by the customer. Many&lt;br /&gt;
organizations demand more than is needed. The goal should be to communicate effectively and&lt;br /&gt;
documentation should be the last option.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
1. http://en.wikipedia.org/wiki/Laissez-faire &amp;lt;br /&amp;gt;&lt;br /&gt;
2. http://en.wikipedia.org/wiki/Systems_development_life-cycle&amp;lt;br /&amp;gt;&lt;br /&gt;
3. http://en.wikipedia.org/wiki/Jim_Highsmith&amp;lt;br /&amp;gt;&lt;br /&gt;
4. http://en.wikipedia.org/wiki/Robert_Cecil_Martin&amp;lt;br /&amp;gt;&lt;br /&gt;
5. http://en.wikipedia.org/wiki/Ken_Schwaber&amp;lt;br /&amp;gt;&lt;br /&gt;
6. http://en.wikipedia.org/wiki/Mike_Beedle&amp;lt;br /&amp;gt;&lt;br /&gt;
7. http://en.wikipedia.org/wiki/Jeff_Sutherland&amp;lt;br /&amp;gt;&lt;br /&gt;
8. http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology&amp;lt;br /&amp;gt;&lt;br /&gt;
9. http://en.wikipedia.org/wiki/Kent_Beck&amp;lt;br /&amp;gt;&lt;br /&gt;
10. http://www.extremeprogramming.org/&amp;lt;br /&amp;gt;&lt;br /&gt;
11. http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html&amp;lt;br /&amp;gt;&lt;br /&gt;
12. http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html&amp;lt;br /&amp;gt;&lt;br /&gt;
13. http://www.projectperfect.com.au/info_lean_development.php&amp;lt;br /&amp;gt;&lt;br /&gt;
14. http://www.nebulon.com/fdd/&amp;lt;br /&amp;gt;&lt;br /&gt;
15. http://applicationengineering.blogspot.com/2009/06/kanban-agile.html&amp;lt;br /&amp;gt;&lt;br /&gt;
16. http://en.wikipedia.org/wiki/Barry_Boehm&amp;lt;br /&amp;gt;&lt;br /&gt;
17. http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf&amp;lt;br /&amp;gt;&lt;br /&gt;
18. http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56210</id>
		<title>CSC/ECE 517 Fall 2011/ch18 6d na</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56210"/>
		<updated>2011-11-24T02:33:05Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''The Agile Landscape'''===&lt;br /&gt;
---------------------&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Overview ==&lt;br /&gt;
Traditional software development methodologies like waterfall methodology are notorious for their lack of flexibility and slowness. That’s why today traditional development methodologies are often replaced by agile development methodologies, which accelerate the process of software development and allow quicker project finalization. Agile software development methodologies give a chance to step away from bureaucracy and strike a balance between laissez-faire [http://en.wikipedia.org/wiki/Laissez-faire] style and immersion into paper work.&lt;br /&gt;
&lt;br /&gt;
==Introduction to Agile Software Development==&lt;br /&gt;
Agile Software Development is a concept, a philosophy and a methodology which evolved in the 90's as an answer to the long-growing frustrations of the waterfall Software Development Life Cycle [SDLC] [http://en.wikipedia.org/wiki/Systems_development_life-cycle]concepts. The term promotes an iterative approach to software development using shorter and lightweight development cycles and some deliverable.&lt;br /&gt;
&lt;br /&gt;
After extensive research, we have found that like other resources, the term Agile as it relates to modern software development, was being used during the 1990's in various published articles both on the internet as well as ComputerWorld/InfoWorld. The papers were based on people looking for a new approach to software process. While the ideas were not new, they gained enough steam for people to pay close attention especially while search engines on the internet became very popular. There is another alliance called the Agile Manifesto, which in our opinion, is a disorganized web site that has some claims to doctrines and philosophies, all borrowed and bastardized to look like an original concept. The web producer put a picture from a meeting in SnowBird to resemble the framers of the constitution and the Declaration of Independence. They then hijacked the term 'Agile' in early 2001 when a bunch of people who had been heavily involved in the Agile concepts got together to exchange ideas and came up with the Manifesto for Agile Software Development.&lt;br /&gt;
&lt;br /&gt;
[[File:AgileDevelopmentna.png]]&lt;br /&gt;
&lt;br /&gt;
The Agile workshop was organized, by Jim Highsmith [http://en.wikipedia.org/wiki/Jim_Highsmith] and Bob Martin[http://en.wikipedia.org/wiki/Robert_Cecil_Martin]. They contacted people who they felt were actively involved in software development communities with these similar ideas and got seventeen of them together for the Snowbird workshop. Initially, they wanted to get together and build better understanding of each others' approaches. Robert Martin was keen to get some statement, a manifesto that could be used to rally the industry behind these kinds of techniques. We also decided we wanted to choose a name to act as an umbrella name for the various approaches. One next step that did follow, with the active involvement of many of these authors, was the formation of the agile alliance. This group is a non-profit group intended to promote and research agile methods. Amongst other things it sponsors an annual conference in the US.&lt;br /&gt;
&lt;br /&gt;
===Agile Manifesto===&lt;br /&gt;
Manifesto for Agile Software development&lt;br /&gt;
&lt;br /&gt;
We are uncovering better ways of developing software by doing it and &lt;br /&gt;
helping others do it. Through this work we have come to value: &lt;br /&gt;
&lt;br /&gt;
'''Individuals and interactions''' over processes and tools&lt;br /&gt;
&lt;br /&gt;
'''working software''' over comprehensive documentation &lt;br /&gt;
&lt;br /&gt;
'''customer collaboration''' over contract negotiation&lt;br /&gt;
&lt;br /&gt;
'''responding to change''' over following a plan&lt;br /&gt;
&lt;br /&gt;
That is, while there is value in the items on the right, &lt;br /&gt;
we value the items on the left more.&lt;br /&gt;
&lt;br /&gt;
===Agile planning activities===&lt;br /&gt;
In non-iterative methodologies like waterfall, there is large upfront design, aiming to predict accurately how much work is involved in each project activity. This leads to a significant investment early in the project, when it is uncertain that the designed functionality is actually desired. Any agile approach to large-scale development has to avoid the reintroduction of the big design up front. One solution is to incorporate levels of planning incorporate a view of ‘the whole.' Agile planning activities for large-scale development efforts should rely on these five levels.&lt;br /&gt;
&lt;br /&gt;
'''Level 1''' - Product Visioning:&lt;br /&gt;
The highest-level view that the stakeholder can paint of the future is the product vision. In this vision, they explain what an organization or product should look like after project completion. They indicate what parts of the system need to change and what efforts can be used to achieve this goal.&lt;br /&gt;
&lt;br /&gt;
'''Level 2''' - Product Roadmap:&lt;br /&gt;
The era of large-scale projects that deliver results in years is behind us. Customers demand faster frequent changes, and delivery is measured in weeks or months. The higher frequency and smaller time-frames force a product owner into thinking in steps - into thinking of a road towards the final product. A product roadmap is created and communicated to fellow delivery people to provide a map so concept is more of a reality.&lt;br /&gt;
&lt;br /&gt;
'''Level 3''' - Release Planning:&lt;br /&gt;
In small projects, the product backlog can provide adequate project overview. The size, duration and deliverables are easily recognized, and there is no need to synchronize deliverables or teams. All of this changes when applying agile concepts to programs. The first time when routing activities and allocating them to teams occurs during release planning.&lt;br /&gt;
&lt;br /&gt;
'''Level 4''' - Iteration Planning:&lt;br /&gt;
For each iteration within the release, a planning session occurs to append detail and increase accuracy. Before or during the session, detail is added to the features by breaking them down into tasks. The actual capacity of the individual teams is known with more certainty than during the release planning session. The combination of these increased accuracies helps the team commit to delivering a number of features during the iteration with a high degree of certainty.&lt;br /&gt;
&lt;br /&gt;
'''Level 5''' - Daily Plan:&lt;br /&gt;
The stand-up meeting is part of everyday life for agile teams. This daily meeting is not often seen as a planning session, but it certainly is. The people look a day ahead, have learned from the earlier days in the iteration, and tell each other what they plan on doing. Issues are raised, possibly addressed, and the success of delivering the desired features within the iteration can be determined after the meeting.&lt;br /&gt;
&lt;br /&gt;
==Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
Scrum is a lightweight management framework with broad applicability for managing iterative and incremental projects of all types. Ken Schwaber[http://en.wikipedia.org/wiki/Ken_Schwaber], Mike Beedle[http://en.wikipedia.org/wiki/Mike_Beedle], Jeff Sutherland[http://en.wikipedia.org/wiki/Jeff_Sutherland] and others contributed significantly to the evolution of Scrum over the last decade and a half. Over the last few years in particular, Scrum has garnered increasing popularity in the software community due to its simplicity, proven success and improved productivity, and its ability to act as a wrapper for various engineering practices promoted by other agile methodologies.[http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology]&lt;br /&gt;
&lt;br /&gt;
===Extreme Programming===&lt;br /&gt;
XP, originally devised by Kent Beck[http://en.wikipedia.org/wiki/Kent_Beck], has emerged as one of the more popular and controversial agile methods. XP is a disciplined approach to delivering high-quality software quickly and continuously. It promotes high customer involvement, rapid feedback loops, continuous testing, continuous planning, and close teamwork to deliver working software at very frequent intervals, typically every 1-3 weeks.&lt;br /&gt;
The original XP recipe is based on four simple values – simplicity, communication, feedback, and courage – and twelve supporting practices: Planning Game, Small Releases, Customer Acceptance Tests, Simple Design, Pair Programming, Test-Driven Development, Refactoring, Continuous Integration, Collective Code Ownership, Coding Standards, Metaphor and Sustainable Pace.[http://www.extremeprogramming.org/]&lt;br /&gt;
&lt;br /&gt;
===Dynamic Systems Development Method (DSDM)===&lt;br /&gt;
DSDM, dating back to 1994, grew out of the need to provide an industry standard project delivery framework for what was referred to as Rapid Application Development (RAD) at the time. While RAD was extremely popular in the early 1990’s, the RAD approach to software delivery evolved in a fairly unstructured manner. As a result, the DSDM Consortium was created and convened in 1994, with the goal of devising and promoting a common industry framework for rapid software delivery. Since 1994, the DSDM methodology has evolved and matured to provide a comprehensive foundation for planning, managing, executing, and scaling agile and iterative software development projects.&lt;br /&gt;
DSDM is based on nine key principles that primarily revolve around business needs/value, active user involvement, empowered teams, frequent delivery, integrated testing, and stakeholder collaboration. DSDM specifically calls out “fitness for business purpose” as the primary criteria for delivery and acceptance of a system, focusing on the useful 80% of the system that can be deployed in 20% of the time.[http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html]&lt;br /&gt;
&lt;br /&gt;
===Crystal===&lt;br /&gt;
The Crystal methodology is one of the most lightweight, adaptable approaches to software development. Crystal is actually comprised of a family of methodologies (Crystal Clear, Crystal Yellow, Crystal Orange, etc.) whose unique characteristics are driven by several factors such as team size, system criticality, and project priorities. This Crystal family addresses the realization that each project may require a slightly tailored set of policies, practices, and processes in order to meet the project’s unique characteristics.[http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html]&lt;br /&gt;
&lt;br /&gt;
===Lean Software Development===&lt;br /&gt;
Lean Software Development is an iterative methodology originally developed by Mary and Tom Poppendieck. Lean Software Development owes much of its principles and practices to the Lean Enterprise movement and the practices of companies like Toyota. Lean Software Development focuses the team on delivering value to the customer, and on the efficiency of the &amp;quot;Value Stream,&amp;quot; the mechanisms that deliver that value. The main principles of Lean include Eliminating Waste, Amplifying Learning, Deciding as Late as Possible, Delivering as Fast as Possible, Empowering the Team, Building Integrity In, and Seeing the Whole.&lt;br /&gt;
Lean eliminates waste by selecting only the truly valuable features for a system, prioritizing those selected, and delivering them in small batches. It emphasizes the speed and efficiency of development workflow, and relies on rapid and reliable feedback between programmers and customers.[http://www.projectperfect.com.au/info_lean_development.php]&lt;br /&gt;
&lt;br /&gt;
===Feature Driven Development (FDD)===&lt;br /&gt;
FDD was originally developed by Jeff De Luca, with contributions by M.A. Rajashima, Lim Bak Wee, Paul Szego, Jon Kern and Stephen Palmer. The first incarnations of FDD occurred as a result of collaboration between De Luca and OOD thought-leader Peter Coad. FDD is a model-driven, short-iteration process. It begins with establishing an overall model shape. Then it continues with a series of two-week &amp;quot;design by feature, build by feature&amp;quot; iterations. The features are small, &amp;quot;useful in the eyes of the client&amp;quot; results.&lt;br /&gt;
FDD designs the rest of the development process around feature delivery using the following eight practices: Domain Object Modeling, Developing by Feature, Component/Class Ownership, Feature Teams, Inspections, Configuration Management, Regular Builds, Visibility of Progress and Results.[http://www.nebulon.com/fdd/]&lt;br /&gt;
&lt;br /&gt;
===Other Methodologies===&lt;br /&gt;
Kanban [http://applicationengineering.blogspot.com/2009/06/kanban-agile.html] as applied to software development is a pull-based planning and execution method.  Rather than planning work items up front and pushing them into the work queue of a team, the team signals when they are ready for more work and pulls it into their queue. &lt;br /&gt;
Kanban historically uses cards to signal the need for an item.  For software development teams, these cards are kept on a Kanban Board which is organized into columns and rows.  The columns represent the different states of a work item, from initial planning through customer acceptance.  The specific columns a team uses should meet the needs of the team and be tailored to their context.  The rows on the Kanban Board represent work items.  Work items are sometimes grouped within areas, such as feature sets and category types.&lt;br /&gt;
Kanban focuses on maximizing the throughput of a team.  One of the ways it achieves this goal is through the application of Work-in-Process (WIP) limits in each of the states of a work item.  Under a Kanban (or Lean) approach, queues or inventories of work in any state are seen as waste.  The WIP limits enable a team to focus on the optimal flow of work items through the system, minimizing any associated waste.  Kanban allows teams to achieve process optimizations while respecting and maintaining a sustainable pace.&lt;br /&gt;
&lt;br /&gt;
==Comparison of different agile methodologies==&lt;br /&gt;
&lt;br /&gt;
[[File:Agile_comp.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Limitations of Agile Methodologies===&lt;br /&gt;
The biggest limitation of agile methodologies is how they handle larger teams. Cockburn and Highsmith both conclude that “Agile development is more difficult for larger teams…as size grows coordinating interfaces become a dominant issue,”. Both Larry Constantine and Martin Fowler also believe that agile with face-to-face communication breaks down and becomes more difficult and complex with developers more than 20. In contrast, heavyweight and plan-driven methods scale better to large projects.&lt;br /&gt;
&lt;br /&gt;
Agile methodologies have a strong emphasis on customer involvement. The customer is considered as part of the development team throughout the whole development of the software. The Standish Group research topped this by providing the second most important factor for a project success is user involvement according to IT executive mangers opinion. According to Boehm, “Agile methods work best when such customers operate in dedicated mode with the development team, and when their tacit knowledge is sufficient for the full span of the application”. Again these methods risk tacit knowledge shortfall. If you have one customer participant then unless they are committed, knowledgeable, collaborative and empowered then there is some chance that you would have a unified set of requirements. However if you have many customers you would have different viewpoints and conflicts between them. This risk could be reduced in plan-driven methods by using documentation, planning, architecture reviews and independent expert project reviews to compensate for on-site customer negligence.&lt;br /&gt;
&lt;br /&gt;
Another factor of agile methodologies that could cause problems is the interpretation of the agile manifesto principle, “Working Software over Comprehensive Documentation”. Boehm[http://en.wikipedia.org/wiki/Barry_Boehm] questions the applicability of agiles’ emphasis on simplicity. Based on XP’s concept of YAGNI precept: “You Aren’t Going to Need It,” believes that doing extra work to get rid of architectural features that do not support the current version. This might cause misconceptions for the developers. This approach can be useful when the future requirements are highly unpredictable. However where future requirements are predictable, Boehm states “this practice not only throws away valuable architecture support for them, it also creates problems with the customers who want developers to believe that their priorities and evolution requirements are worth accommodating”.[http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf]&lt;br /&gt;
&lt;br /&gt;
==Adoption and Effectiveness of Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
'''Small team'''&lt;br /&gt;
-&lt;br /&gt;
Agile teams are restricted in size for several reasons:&lt;br /&gt;
The team has to self-organize, implying an efficient order emerging from&lt;br /&gt;
temporary chaos. Obviously this process would be too long for larger teams.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members have to be able to communicate spontaneously with each other&lt;br /&gt;
and with other stakeholders (i.e. without setting up meetings, sending emails,&lt;br /&gt;
etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
All team members participate in the day-to-day management (tasks, changes,&lt;br /&gt;
impediments, etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members need to understand what others are doing (cross-functional&lt;br /&gt;
perspective, team ownership), help each other with ease, and collaborate without&lt;br /&gt;
centralized control.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
The team has to be co-located (this limitation will be examined later).&lt;br /&gt;
As you can see, agile is a highly participative style of software development.&lt;br /&gt;
Therefore, the number of participants significantly affects the efficiency of the process.&lt;br /&gt;
The daily scrum of the Scrum agile methodology perfectly illustrates this limitation. The&lt;br /&gt;
daily scrum is a 15 minutes meeting involving the whole team. The ScrumMaster (Scrum&lt;br /&gt;
word for team leader) goes around the table and each team member mentions the status&lt;br /&gt;
of tasks and other issues such as impediments or changes. I managed Scrum teams of&lt;br /&gt;
sizes varying from 3 to 8, and I must admit that in my opinion 8 is about the upper limit.&lt;br /&gt;
Beyond this size, communication becomes inefficient.&lt;br /&gt;
Assuming that large projects tend to require large teams, this restriction naturally&lt;br /&gt;
extends to project size.&lt;br /&gt;
&lt;br /&gt;
'''Collocated team'''&lt;br /&gt;
&lt;br /&gt;
Agile emphasizes that face-to-face, spontaneous conversation is the best form of&lt;br /&gt;
communication. While we can certainly agree on the benefits of this form of&lt;br /&gt;
communication, it severely limits agile applicability. Moreover, this agile principle extends&lt;br /&gt;
beyond the development team since other stakeholders such as business analysts are&lt;br /&gt;
required to be collocated.&lt;br /&gt;
What does it mean in practice? Imagine that a team member has a question concerninga use case. She should be able to get up, walk 10 meters, ask the business analyst orkey user for clarification, and get back to work. Consequently, office space has to bephysically arranged according to agile projects so that all stakeholders involved in dailyactivities are located at the same place (let's say within a minute of walking distance).&lt;br /&gt;
We can easily think of a number of situations where this limitation prevents using agile:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Office space organized by departments: In most organizations, offices are&lt;br /&gt;
organized by departments such as IT, marketing, accounting, sales, and so on.&lt;br /&gt;
Moving people around according to agile projects is unrealistic. Even if it was&lt;br /&gt;
possible, it would negatively affects other parts of the business.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Distributed environment: Developers are often distributed throughout the&lt;br /&gt;
organization, whether in the same branch or in different branches (or working&lt;br /&gt;
from home). Just like for the previous point, moving these people is unrealistic.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Subcontracting: Many organizations partly or completely outsource software&lt;br /&gt;
development. Assuming that some roles such as business analysts or key users&lt;br /&gt;
would be located at the company, this situation doesn't comply with the agile&lt;br /&gt;
collocation principle.&lt;br /&gt;
&lt;br /&gt;
'''Team ownership vs. individual accountability'''&lt;br /&gt;
&lt;br /&gt;
Agile development stresses the importance of team ownership in order to improve&lt;br /&gt;
teamwork and therefore overall results. Team ownership is a very appealing concept,&lt;br /&gt;
but how can we implement it since an organization's performance-reward system&lt;br /&gt;
assesses individual performance and rewards individuals, not teams?&lt;br /&gt;
&lt;br /&gt;
If we rely exclusively on individual accountability, we tend to generate selfish behavior&lt;br /&gt;
that can affect teamwork. If we rely exclusively on team assessment, we overlook that&lt;br /&gt;
individuals perform differently in a given team, creating opportunities for underperforming&lt;br /&gt;
team members to get away with it and lessening incentives to perform in a superior way.&lt;br /&gt;
Obviously we have to find a way to take both these perspectives into account.&lt;br /&gt;
Actually this problem can be solved elegantly by defining two levels of performance-&lt;br /&gt;
reward:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team level: The team is perceived as a single entity from management's point of&lt;br /&gt;
view. Management assesses teams' performance and allocates rewards to&lt;br /&gt;
teams in the form of points.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Individual level: Team leaders (or whatever the title is) evaluate teams&lt;br /&gt;
members rewarding them with points.&lt;br /&gt;
In order to have a short feedback loop, assessment should be done frequently (every&lt;br /&gt;
month for example) using a lightweight system incurring very little administrative&lt;br /&gt;
overhead.&lt;br /&gt;
&lt;br /&gt;
Thanks to this kind of system, we encourage teamwork but we still take individual&lt;br /&gt;
contribution into account, effectively reaching a balance between team ownership and&lt;br /&gt;
individual accountability.[http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf]&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Agile software development stresses rapid iterations, small and frequent releases, and evolving requirements&lt;br /&gt;
facilitated by direct user involvement in the development process. Serena’s application lifecycle management&lt;br /&gt;
tools provide a framework to visualize scope, orchestrate mundane and repetitive development tasks, and&lt;br /&gt;
enforce process. Unlike agile-specific products offered by agile-only vendors, Serena products are methodologyneutral&lt;br /&gt;
and can be applied equally well to agile as well as more traditional serial development processes, so&lt;br /&gt;
they can support all the development activities within an enterprise.&lt;br /&gt;
&lt;br /&gt;
Any team could be agile, regardless of the team size, but size is an issue because more people make&lt;br /&gt;
communication harder. There is much experience from small teams. There is less for larger teams, for&lt;br /&gt;
which scale-up strategies need to be applied.&lt;br /&gt;
&lt;br /&gt;
• Experience is important for an Agile project to succeed, but experience with actually building systems&lt;br /&gt;
is much more important than experience with Agile methods. It was estimated that 25%-33% of the&lt;br /&gt;
project personnel must be “competent and experienced”, but the necessary percentage might even be as&lt;br /&gt;
low as 10% if the teams practice pair programming due to the fact that they mentor each other.&lt;br /&gt;
&lt;br /&gt;
• Reliable and safety-critical projects can be conducted using Agile Methods. The key is that performance&lt;br /&gt;
requirements are made explicit early, and proper levels of testing are planned. It is easier to address&lt;br /&gt;
critical issues using Agile Methods since the customer gives requirements, makes important&lt;br /&gt;
things explicit early and provides continual input.&lt;br /&gt;
&lt;br /&gt;
• Agile Methods require less formal training than traditional methods. Pair programming helps minimize&lt;br /&gt;
what is needed in terms of training, because people mentor each other. This is more important than&lt;br /&gt;
regular training that can many times be completed as self-training. Training material is available in particular&lt;br /&gt;
for XP, Crystal, Scrum, and FDD.&lt;br /&gt;
&lt;br /&gt;
• The three most important success factors are culture, people, and communication. Agile Methods need&lt;br /&gt;
cultural support otherwise they will not succeed. Competent team members are crucial. Agile Methods&lt;br /&gt;
use fewer, but more competent people. Physically co-located teams and pair programming support&lt;br /&gt;
rapid communication. Close interaction with the customer and frequent customer feedback are critical&lt;br /&gt;
success factors.&lt;br /&gt;
&lt;br /&gt;
• Early warning signs can be spotted in Agile projects, e.g. low morale expressed during the daily meeting.&lt;br /&gt;
Other signs are production of “useless documentation” and delays of planned iterations.&lt;br /&gt;
&lt;br /&gt;
• Refactoring should be done frequently and of reasonably sized code, keeping the scope down and local.&lt;br /&gt;
Large-scale refactoring is not a problem, and is more feasible using Agile Methods. Big architectural changes do not&lt;br /&gt;
need to be risky if a set of automated tests is maintained.&lt;br /&gt;
&lt;br /&gt;
• Documentation should be assigned a cost and its extent be determined by the customer. Many&lt;br /&gt;
organizations demand more than is needed. The goal should be to communicate effectively and&lt;br /&gt;
documentation should be the last option.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
1. http://en.wikipedia.org/wiki/Laissez-faire &amp;lt;br /&amp;gt;&lt;br /&gt;
2. http://en.wikipedia.org/wiki/Systems_development_life-cycle&amp;lt;br /&amp;gt;&lt;br /&gt;
3. http://en.wikipedia.org/wiki/Jim_Highsmith&amp;lt;br /&amp;gt;&lt;br /&gt;
4. http://en.wikipedia.org/wiki/Robert_Cecil_Martin&amp;lt;br /&amp;gt;&lt;br /&gt;
5. http://en.wikipedia.org/wiki/Ken_Schwaber&amp;lt;br /&amp;gt;&lt;br /&gt;
6. http://en.wikipedia.org/wiki/Mike_Beedle&amp;lt;br /&amp;gt;&lt;br /&gt;
7. http://en.wikipedia.org/wiki/Jeff_Sutherland&amp;lt;br /&amp;gt;&lt;br /&gt;
8. http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology&amp;lt;br /&amp;gt;&lt;br /&gt;
9. http://en.wikipedia.org/wiki/Kent_Beck&amp;lt;br /&amp;gt;&lt;br /&gt;
10. http://www.extremeprogramming.org/&amp;lt;br /&amp;gt;&lt;br /&gt;
11. http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html&amp;lt;br /&amp;gt;&lt;br /&gt;
12. http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html&amp;lt;br /&amp;gt;&lt;br /&gt;
13. http://www.projectperfect.com.au/info_lean_development.php&amp;lt;br /&amp;gt;&lt;br /&gt;
14. http://www.nebulon.com/fdd/&amp;lt;br /&amp;gt;&lt;br /&gt;
15. http://applicationengineering.blogspot.com/2009/06/kanban-agile.html&amp;lt;br /&amp;gt;&lt;br /&gt;
16. http://en.wikipedia.org/wiki/Barry_Boehm&amp;lt;br /&amp;gt;&lt;br /&gt;
17. http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf&amp;lt;br /&amp;gt;&lt;br /&gt;
18. http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56208</id>
		<title>CSC/ECE 517 Fall 2011/ch18 6d na</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56208"/>
		<updated>2011-11-24T02:30:43Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: /* References */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''''The Agile landscape'''''  &lt;br /&gt;
---------------------&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Overview ==&lt;br /&gt;
Traditional software development methodologies like waterfall methodology are notorious for their lack of flexibility and slowness. That’s why today traditional development methodologies are often replaced by agile development methodologies, which accelerate the process of software development and allow quicker project finalization. Agile software development methodologies give a chance to step away from bureaucracy and strike a balance between laissez-faire [http://en.wikipedia.org/wiki/Laissez-faire] style and immersion into paper work.&lt;br /&gt;
&lt;br /&gt;
==Introduction to Agile Software Development==&lt;br /&gt;
Agile Software Development is a concept, a philosophy and a methodology which evolved in the 90's as an answer to the long-growing frustrations of the waterfall Software Development Life Cycle [SDLC] [http://en.wikipedia.org/wiki/Systems_development_life-cycle]concepts. The term promotes an iterative approach to software development using shorter and lightweight development cycles and some deliverable.&lt;br /&gt;
&lt;br /&gt;
After extensive research, we have found that like other resources, the term Agile as it relates to modern software development, was being used during the 1990's in various published articles both on the internet as well as ComputerWorld/InfoWorld. The papers were based on people looking for a new approach to software process. While the ideas were not new, they gained enough steam for people to pay close attention especially while search engines on the internet became very popular. There is another alliance called the Agile Manifesto, which in our opinion, is a disorganized web site that has some claims to doctrines and philosophies, all borrowed and bastardized to look like an original concept. The web producer put a picture from a meeting in SnowBird to resemble the framers of the constitution and the Declaration of Independence. They then hijacked the term 'Agile' in early 2001 when a bunch of people who had been heavily involved in the Agile concepts got together to exchange ideas and came up with the Manifesto for Agile Software Development.&lt;br /&gt;
&lt;br /&gt;
[[File:AgileDevelopmentna.png]]&lt;br /&gt;
&lt;br /&gt;
The Agile workshop was organized, by Jim Highsmith [http://en.wikipedia.org/wiki/Jim_Highsmith] and Bob Martin[http://en.wikipedia.org/wiki/Robert_Cecil_Martin]. They contacted people who they felt were actively involved in software development communities with these similar ideas and got seventeen of them together for the Snowbird workshop. Initially, they wanted to get together and build better understanding of each others' approaches. Robert Martin was keen to get some statement, a manifesto that could be used to rally the industry behind these kinds of techniques. We also decided we wanted to choose a name to act as an umbrella name for the various approaches. One next step that did follow, with the active involvement of many of these authors, was the formation of the agile alliance. This group is a non-profit group intended to promote and research agile methods. Amongst other things it sponsors an annual conference in the US.&lt;br /&gt;
&lt;br /&gt;
===Agile Manifesto===&lt;br /&gt;
Manifesto for Agile Software development&lt;br /&gt;
&lt;br /&gt;
We are uncovering better ways of developing software by doing it and &lt;br /&gt;
helping others do it. Through this work we have come to value: &lt;br /&gt;
&lt;br /&gt;
'''Individuals and interactions''' over processes and tools&lt;br /&gt;
&lt;br /&gt;
'''working software''' over comprehensive documentation &lt;br /&gt;
&lt;br /&gt;
'''customer collaboration''' over contract negotiation&lt;br /&gt;
&lt;br /&gt;
'''responding to change''' over following a plan&lt;br /&gt;
&lt;br /&gt;
That is, while there is value in the items on the right, &lt;br /&gt;
we value the items on the left more.&lt;br /&gt;
&lt;br /&gt;
===Agile planning activities===&lt;br /&gt;
In non-iterative methodologies like waterfall, there is large upfront design, aiming to predict accurately how much work is involved in each project activity. This leads to a significant investment early in the project, when it is uncertain that the designed functionality is actually desired. Any agile approach to large-scale development has to avoid the reintroduction of the big design up front. One solution is to incorporate levels of planning incorporate a view of ‘the whole.' Agile planning activities for large-scale development efforts should rely on these five levels.&lt;br /&gt;
&lt;br /&gt;
'''Level 1''' - Product Visioning:&lt;br /&gt;
The highest-level view that the stakeholder can paint of the future is the product vision. In this vision, they explain what an organization or product should look like after project completion. They indicate what parts of the system need to change and what efforts can be used to achieve this goal.&lt;br /&gt;
&lt;br /&gt;
'''Level 2''' - Product Roadmap:&lt;br /&gt;
The era of large-scale projects that deliver results in years is behind us. Customers demand faster frequent changes, and delivery is measured in weeks or months. The higher frequency and smaller time-frames force a product owner into thinking in steps - into thinking of a road towards the final product. A product roadmap is created and communicated to fellow delivery people to provide a map so concept is more of a reality.&lt;br /&gt;
&lt;br /&gt;
'''Level 3''' - Release Planning:&lt;br /&gt;
In small projects, the product backlog can provide adequate project overview. The size, duration and deliverables are easily recognized, and there is no need to synchronize deliverables or teams. All of this changes when applying agile concepts to programs. The first time when routing activities and allocating them to teams occurs during release planning.&lt;br /&gt;
&lt;br /&gt;
'''Level 4''' - Iteration Planning:&lt;br /&gt;
For each iteration within the release, a planning session occurs to append detail and increase accuracy. Before or during the session, detail is added to the features by breaking them down into tasks. The actual capacity of the individual teams is known with more certainty than during the release planning session. The combination of these increased accuracies helps the team commit to delivering a number of features during the iteration with a high degree of certainty.&lt;br /&gt;
&lt;br /&gt;
'''Level 5''' - Daily Plan:&lt;br /&gt;
The stand-up meeting is part of everyday life for agile teams. This daily meeting is not often seen as a planning session, but it certainly is. The people look a day ahead, have learned from the earlier days in the iteration, and tell each other what they plan on doing. Issues are raised, possibly addressed, and the success of delivering the desired features within the iteration can be determined after the meeting.&lt;br /&gt;
&lt;br /&gt;
==Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
Scrum is a lightweight management framework with broad applicability for managing iterative and incremental projects of all types. Ken Schwaber[http://en.wikipedia.org/wiki/Ken_Schwaber], Mike Beedle[http://en.wikipedia.org/wiki/Mike_Beedle], Jeff Sutherland[http://en.wikipedia.org/wiki/Jeff_Sutherland] and others contributed significantly to the evolution of Scrum over the last decade and a half. Over the last few years in particular, Scrum has garnered increasing popularity in the software community due to its simplicity, proven success and improved productivity, and its ability to act as a wrapper for various engineering practices promoted by other agile methodologies.[http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology]&lt;br /&gt;
&lt;br /&gt;
===Extreme Programming===&lt;br /&gt;
XP, originally devised by Kent Beck[http://en.wikipedia.org/wiki/Kent_Beck], has emerged as one of the more popular and controversial agile methods. XP is a disciplined approach to delivering high-quality software quickly and continuously. It promotes high customer involvement, rapid feedback loops, continuous testing, continuous planning, and close teamwork to deliver working software at very frequent intervals, typically every 1-3 weeks.&lt;br /&gt;
The original XP recipe is based on four simple values – simplicity, communication, feedback, and courage – and twelve supporting practices: Planning Game, Small Releases, Customer Acceptance Tests, Simple Design, Pair Programming, Test-Driven Development, Refactoring, Continuous Integration, Collective Code Ownership, Coding Standards, Metaphor and Sustainable Pace.[http://www.extremeprogramming.org/]&lt;br /&gt;
&lt;br /&gt;
===Dynamic Systems Development Method (DSDM)===&lt;br /&gt;
DSDM, dating back to 1994, grew out of the need to provide an industry standard project delivery framework for what was referred to as Rapid Application Development (RAD) at the time. While RAD was extremely popular in the early 1990’s, the RAD approach to software delivery evolved in a fairly unstructured manner. As a result, the DSDM Consortium was created and convened in 1994, with the goal of devising and promoting a common industry framework for rapid software delivery. Since 1994, the DSDM methodology has evolved and matured to provide a comprehensive foundation for planning, managing, executing, and scaling agile and iterative software development projects.&lt;br /&gt;
DSDM is based on nine key principles that primarily revolve around business needs/value, active user involvement, empowered teams, frequent delivery, integrated testing, and stakeholder collaboration. DSDM specifically calls out “fitness for business purpose” as the primary criteria for delivery and acceptance of a system, focusing on the useful 80% of the system that can be deployed in 20% of the time.[http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html]&lt;br /&gt;
&lt;br /&gt;
===Crystal===&lt;br /&gt;
The Crystal methodology is one of the most lightweight, adaptable approaches to software development. Crystal is actually comprised of a family of methodologies (Crystal Clear, Crystal Yellow, Crystal Orange, etc.) whose unique characteristics are driven by several factors such as team size, system criticality, and project priorities. This Crystal family addresses the realization that each project may require a slightly tailored set of policies, practices, and processes in order to meet the project’s unique characteristics.[http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html]&lt;br /&gt;
&lt;br /&gt;
===Lean Software Development===&lt;br /&gt;
Lean Software Development is an iterative methodology originally developed by Mary and Tom Poppendieck. Lean Software Development owes much of its principles and practices to the Lean Enterprise movement and the practices of companies like Toyota. Lean Software Development focuses the team on delivering value to the customer, and on the efficiency of the &amp;quot;Value Stream,&amp;quot; the mechanisms that deliver that value. The main principles of Lean include Eliminating Waste, Amplifying Learning, Deciding as Late as Possible, Delivering as Fast as Possible, Empowering the Team, Building Integrity In, and Seeing the Whole.&lt;br /&gt;
Lean eliminates waste by selecting only the truly valuable features for a system, prioritizing those selected, and delivering them in small batches. It emphasizes the speed and efficiency of development workflow, and relies on rapid and reliable feedback between programmers and customers.[http://www.projectperfect.com.au/info_lean_development.php]&lt;br /&gt;
&lt;br /&gt;
===Feature Driven Development (FDD)===&lt;br /&gt;
FDD was originally developed by Jeff De Luca, with contributions by M.A. Rajashima, Lim Bak Wee, Paul Szego, Jon Kern and Stephen Palmer. The first incarnations of FDD occurred as a result of collaboration between De Luca and OOD thought-leader Peter Coad. FDD is a model-driven, short-iteration process. It begins with establishing an overall model shape. Then it continues with a series of two-week &amp;quot;design by feature, build by feature&amp;quot; iterations. The features are small, &amp;quot;useful in the eyes of the client&amp;quot; results.&lt;br /&gt;
FDD designs the rest of the development process around feature delivery using the following eight practices: Domain Object Modeling, Developing by Feature, Component/Class Ownership, Feature Teams, Inspections, Configuration Management, Regular Builds, Visibility of Progress and Results.[http://www.nebulon.com/fdd/]&lt;br /&gt;
&lt;br /&gt;
===Other Methodologies===&lt;br /&gt;
Kanban [http://applicationengineering.blogspot.com/2009/06/kanban-agile.html] as applied to software development is a pull-based planning and execution method.  Rather than planning work items up front and pushing them into the work queue of a team, the team signals when they are ready for more work and pulls it into their queue. &lt;br /&gt;
Kanban historically uses cards to signal the need for an item.  For software development teams, these cards are kept on a Kanban Board which is organized into columns and rows.  The columns represent the different states of a work item, from initial planning through customer acceptance.  The specific columns a team uses should meet the needs of the team and be tailored to their context.  The rows on the Kanban Board represent work items.  Work items are sometimes grouped within areas, such as feature sets and category types.&lt;br /&gt;
Kanban focuses on maximizing the throughput of a team.  One of the ways it achieves this goal is through the application of Work-in-Process (WIP) limits in each of the states of a work item.  Under a Kanban (or Lean) approach, queues or inventories of work in any state are seen as waste.  The WIP limits enable a team to focus on the optimal flow of work items through the system, minimizing any associated waste.  Kanban allows teams to achieve process optimizations while respecting and maintaining a sustainable pace.&lt;br /&gt;
&lt;br /&gt;
==Comparison of different agile methodologies==&lt;br /&gt;
&lt;br /&gt;
[[File:Agile_comp.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Limitations of Agile Methodologies===&lt;br /&gt;
The biggest limitation of agile methodologies is how they handle larger teams. Cockburn and Highsmith both conclude that “Agile development is more difficult for larger teams…as size grows coordinating interfaces become a dominant issue,”. Both Larry Constantine and Martin Fowler also believe that agile with face-to-face communication breaks down and becomes more difficult and complex with developers more than 20. In contrast, heavyweight and plan-driven methods scale better to large projects.&lt;br /&gt;
&lt;br /&gt;
Agile methodologies have a strong emphasis on customer involvement. The customer is considered as part of the development team throughout the whole development of the software. The Standish Group research topped this by providing the second most important factor for a project success is user involvement according to IT executive mangers opinion. According to Boehm, “Agile methods work best when such customers operate in dedicated mode with the development team, and when their tacit knowledge is sufficient for the full span of the application”. Again these methods risk tacit knowledge shortfall. If you have one customer participant then unless they are committed, knowledgeable, collaborative and empowered then there is some chance that you would have a unified set of requirements. However if you have many customers you would have different viewpoints and conflicts between them. This risk could be reduced in plan-driven methods by using documentation, planning, architecture reviews and independent expert project reviews to compensate for on-site customer negligence.&lt;br /&gt;
&lt;br /&gt;
Another factor of agile methodologies that could cause problems is the interpretation of the agile manifesto principle, “Working Software over Comprehensive Documentation”. Boehm[http://en.wikipedia.org/wiki/Barry_Boehm] questions the applicability of agiles’ emphasis on simplicity. Based on XP’s concept of YAGNI precept: “You Aren’t Going to Need It,” believes that doing extra work to get rid of architectural features that do not support the current version. This might cause misconceptions for the developers. This approach can be useful when the future requirements are highly unpredictable. However where future requirements are predictable, Boehm states “this practice not only throws away valuable architecture support for them, it also creates problems with the customers who want developers to believe that their priorities and evolution requirements are worth accommodating”.[http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf]&lt;br /&gt;
&lt;br /&gt;
==Adoption and Effectiveness of Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
'''Small team'''&lt;br /&gt;
-&lt;br /&gt;
Agile teams are restricted in size for several reasons:&lt;br /&gt;
The team has to self-organize, implying an efficient order emerging from&lt;br /&gt;
temporary chaos. Obviously this process would be too long for larger teams.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members have to be able to communicate spontaneously with each other&lt;br /&gt;
and with other stakeholders (i.e. without setting up meetings, sending emails,&lt;br /&gt;
etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
All team members participate in the day-to-day management (tasks, changes,&lt;br /&gt;
impediments, etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members need to understand what others are doing (cross-functional&lt;br /&gt;
perspective, team ownership), help each other with ease, and collaborate without&lt;br /&gt;
centralized control.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
The team has to be co-located (this limitation will be examined later).&lt;br /&gt;
As you can see, agile is a highly participative style of software development.&lt;br /&gt;
Therefore, the number of participants significantly affects the efficiency of the process.&lt;br /&gt;
The daily scrum of the Scrum agile methodology perfectly illustrates this limitation. The&lt;br /&gt;
daily scrum is a 15 minutes meeting involving the whole team. The ScrumMaster (Scrum&lt;br /&gt;
word for team leader) goes around the table and each team member mentions the status&lt;br /&gt;
of tasks and other issues such as impediments or changes. I managed Scrum teams of&lt;br /&gt;
sizes varying from 3 to 8, and I must admit that in my opinion 8 is about the upper limit.&lt;br /&gt;
Beyond this size, communication becomes inefficient.&lt;br /&gt;
Assuming that large projects tend to require large teams, this restriction naturally&lt;br /&gt;
extends to project size.&lt;br /&gt;
&lt;br /&gt;
'''Collocated team'''&lt;br /&gt;
&lt;br /&gt;
Agile emphasizes that face-to-face, spontaneous conversation is the best form of&lt;br /&gt;
communication. While we can certainly agree on the benefits of this form of&lt;br /&gt;
communication, it severely limits agile applicability. Moreover, this agile principle extends&lt;br /&gt;
beyond the development team since other stakeholders such as business analysts are&lt;br /&gt;
required to be collocated.&lt;br /&gt;
What does it mean in practice? Imagine that a team member has a question concerninga use case. She should be able to get up, walk 10 meters, ask the business analyst orkey user for clarification, and get back to work. Consequently, office space has to bephysically arranged according to agile projects so that all stakeholders involved in dailyactivities are located at the same place (let's say within a minute of walking distance).&lt;br /&gt;
We can easily think of a number of situations where this limitation prevents using agile:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Office space organized by departments: In most organizations, offices are&lt;br /&gt;
organized by departments such as IT, marketing, accounting, sales, and so on.&lt;br /&gt;
Moving people around according to agile projects is unrealistic. Even if it was&lt;br /&gt;
possible, it would negatively affects other parts of the business.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Distributed environment: Developers are often distributed throughout the&lt;br /&gt;
organization, whether in the same branch or in different branches (or working&lt;br /&gt;
from home). Just like for the previous point, moving these people is unrealistic.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Subcontracting: Many organizations partly or completely outsource software&lt;br /&gt;
development. Assuming that some roles such as business analysts or key users&lt;br /&gt;
would be located at the company, this situation doesn't comply with the agile&lt;br /&gt;
collocation principle.&lt;br /&gt;
&lt;br /&gt;
'''Team ownership vs. individual accountability'''&lt;br /&gt;
&lt;br /&gt;
Agile development stresses the importance of team ownership in order to improve&lt;br /&gt;
teamwork and therefore overall results. Team ownership is a very appealing concept,&lt;br /&gt;
but how can we implement it since an organization's performance-reward system&lt;br /&gt;
assesses individual performance and rewards individuals, not teams?&lt;br /&gt;
&lt;br /&gt;
If we rely exclusively on individual accountability, we tend to generate selfish behavior&lt;br /&gt;
that can affect teamwork. If we rely exclusively on team assessment, we overlook that&lt;br /&gt;
individuals perform differently in a given team, creating opportunities for underperforming&lt;br /&gt;
team members to get away with it and lessening incentives to perform in a superior way.&lt;br /&gt;
Obviously we have to find a way to take both these perspectives into account.&lt;br /&gt;
Actually this problem can be solved elegantly by defining two levels of performance-&lt;br /&gt;
reward:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team level: The team is perceived as a single entity from management's point of&lt;br /&gt;
view. Management assesses teams' performance and allocates rewards to&lt;br /&gt;
teams in the form of points.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Individual level: Team leaders (or whatever the title is) evaluate teams&lt;br /&gt;
members rewarding them with points.&lt;br /&gt;
In order to have a short feedback loop, assessment should be done frequently (every&lt;br /&gt;
month for example) using a lightweight system incurring very little administrative&lt;br /&gt;
overhead.&lt;br /&gt;
&lt;br /&gt;
Thanks to this kind of system, we encourage teamwork but we still take individual&lt;br /&gt;
contribution into account, effectively reaching a balance between team ownership and&lt;br /&gt;
individual accountability.[http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf]&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Agile software development stresses rapid iterations, small and frequent releases, and evolving requirements&lt;br /&gt;
facilitated by direct user involvement in the development process. Serena’s application lifecycle management&lt;br /&gt;
tools provide a framework to visualize scope, orchestrate mundane and repetitive development tasks, and&lt;br /&gt;
enforce process. Unlike agile-specific products offered by agile-only vendors, Serena products are methodologyneutral&lt;br /&gt;
and can be applied equally well to agile as well as more traditional serial development processes, so&lt;br /&gt;
they can support all the development activities within an enterprise.&lt;br /&gt;
&lt;br /&gt;
Any team could be agile, regardless of the team size, but size is an issue because more people make&lt;br /&gt;
communication harder. There is much experience from small teams. There is less for larger teams, for&lt;br /&gt;
which scale-up strategies need to be applied.&lt;br /&gt;
&lt;br /&gt;
• Experience is important for an Agile project to succeed, but experience with actually building systems&lt;br /&gt;
is much more important than experience with Agile methods. It was estimated that 25%-33% of the&lt;br /&gt;
project personnel must be “competent and experienced”, but the necessary percentage might even be as&lt;br /&gt;
low as 10% if the teams practice pair programming due to the fact that they mentor each other.&lt;br /&gt;
&lt;br /&gt;
• Reliable and safety-critical projects can be conducted using Agile Methods. The key is that performance&lt;br /&gt;
requirements are made explicit early, and proper levels of testing are planned. It is easier to address&lt;br /&gt;
critical issues using Agile Methods since the customer gives requirements, makes important&lt;br /&gt;
things explicit early and provides continual input.&lt;br /&gt;
&lt;br /&gt;
• Agile Methods require less formal training than traditional methods. Pair programming helps minimize&lt;br /&gt;
what is needed in terms of training, because people mentor each other. This is more important than&lt;br /&gt;
regular training that can many times be completed as self-training. Training material is available in particular&lt;br /&gt;
for XP, Crystal, Scrum, and FDD.&lt;br /&gt;
&lt;br /&gt;
• The three most important success factors are culture, people, and communication. Agile Methods need&lt;br /&gt;
cultural support otherwise they will not succeed. Competent team members are crucial. Agile Methods&lt;br /&gt;
use fewer, but more competent people. Physically co-located teams and pair programming support&lt;br /&gt;
rapid communication. Close interaction with the customer and frequent customer feedback are critical&lt;br /&gt;
success factors.&lt;br /&gt;
&lt;br /&gt;
• Early warning signs can be spotted in Agile projects, e.g. low morale expressed during the daily meeting.&lt;br /&gt;
Other signs are production of “useless documentation” and delays of planned iterations.&lt;br /&gt;
&lt;br /&gt;
• Refactoring should be done frequently and of reasonably sized code, keeping the scope down and local.&lt;br /&gt;
Large-scale refactoring is not a problem, and is more feasible using Agile Methods. Big architectural changes do not&lt;br /&gt;
need to be risky if a set of automated tests is maintained.&lt;br /&gt;
&lt;br /&gt;
• Documentation should be assigned a cost and its extent be determined by the customer. Many&lt;br /&gt;
organizations demand more than is needed. The goal should be to communicate effectively and&lt;br /&gt;
documentation should be the last option.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
1. http://en.wikipedia.org/wiki/Laissez-faire &amp;lt;br /&amp;gt;&lt;br /&gt;
2. http://en.wikipedia.org/wiki/Systems_development_life-cycle&amp;lt;br /&amp;gt;&lt;br /&gt;
3. http://en.wikipedia.org/wiki/Jim_Highsmith&amp;lt;br /&amp;gt;&lt;br /&gt;
4. http://en.wikipedia.org/wiki/Robert_Cecil_Martin&amp;lt;br /&amp;gt;&lt;br /&gt;
5. http://en.wikipedia.org/wiki/Ken_Schwaber&amp;lt;br /&amp;gt;&lt;br /&gt;
6. http://en.wikipedia.org/wiki/Mike_Beedle&amp;lt;br /&amp;gt;&lt;br /&gt;
7. http://en.wikipedia.org/wiki/Jeff_Sutherland&amp;lt;br /&amp;gt;&lt;br /&gt;
8. http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology&amp;lt;br /&amp;gt;&lt;br /&gt;
9. http://en.wikipedia.org/wiki/Kent_Beck&amp;lt;br /&amp;gt;&lt;br /&gt;
10. http://www.extremeprogramming.org/&amp;lt;br /&amp;gt;&lt;br /&gt;
11. http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html&amp;lt;br /&amp;gt;&lt;br /&gt;
12. http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html&amp;lt;br /&amp;gt;&lt;br /&gt;
13. http://www.projectperfect.com.au/info_lean_development.php&amp;lt;br /&amp;gt;&lt;br /&gt;
14. http://www.nebulon.com/fdd/&amp;lt;br /&amp;gt;&lt;br /&gt;
15. http://applicationengineering.blogspot.com/2009/06/kanban-agile.html&amp;lt;br /&amp;gt;&lt;br /&gt;
16. http://en.wikipedia.org/wiki/Barry_Boehm&amp;lt;br /&amp;gt;&lt;br /&gt;
17. http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf&amp;lt;br /&amp;gt;&lt;br /&gt;
18. http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56207</id>
		<title>CSC/ECE 517 Fall 2011/ch18 6d na</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2011/ch18_6d_na&amp;diff=56207"/>
		<updated>2011-11-24T02:28:38Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''''The Agile landscape'''''  &lt;br /&gt;
---------------------&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
==Overview ==&lt;br /&gt;
Traditional software development methodologies like waterfall methodology are notorious for their lack of flexibility and slowness. That’s why today traditional development methodologies are often replaced by agile development methodologies, which accelerate the process of software development and allow quicker project finalization. Agile software development methodologies give a chance to step away from bureaucracy and strike a balance between laissez-faire [http://en.wikipedia.org/wiki/Laissez-faire] style and immersion into paper work.&lt;br /&gt;
&lt;br /&gt;
==Introduction to Agile Software Development==&lt;br /&gt;
Agile Software Development is a concept, a philosophy and a methodology which evolved in the 90's as an answer to the long-growing frustrations of the waterfall Software Development Life Cycle [SDLC] [http://en.wikipedia.org/wiki/Systems_development_life-cycle]concepts. The term promotes an iterative approach to software development using shorter and lightweight development cycles and some deliverable.&lt;br /&gt;
&lt;br /&gt;
After extensive research, we have found that like other resources, the term Agile as it relates to modern software development, was being used during the 1990's in various published articles both on the internet as well as ComputerWorld/InfoWorld. The papers were based on people looking for a new approach to software process. While the ideas were not new, they gained enough steam for people to pay close attention especially while search engines on the internet became very popular. There is another alliance called the Agile Manifesto, which in our opinion, is a disorganized web site that has some claims to doctrines and philosophies, all borrowed and bastardized to look like an original concept. The web producer put a picture from a meeting in SnowBird to resemble the framers of the constitution and the Declaration of Independence. They then hijacked the term 'Agile' in early 2001 when a bunch of people who had been heavily involved in the Agile concepts got together to exchange ideas and came up with the Manifesto for Agile Software Development.&lt;br /&gt;
&lt;br /&gt;
[[File:AgileDevelopmentna.png]]&lt;br /&gt;
&lt;br /&gt;
The Agile workshop was organized, by Jim Highsmith [http://en.wikipedia.org/wiki/Jim_Highsmith] and Bob Martin[http://en.wikipedia.org/wiki/Robert_Cecil_Martin]. They contacted people who they felt were actively involved in software development communities with these similar ideas and got seventeen of them together for the Snowbird workshop. Initially, they wanted to get together and build better understanding of each others' approaches. Robert Martin was keen to get some statement, a manifesto that could be used to rally the industry behind these kinds of techniques. We also decided we wanted to choose a name to act as an umbrella name for the various approaches. One next step that did follow, with the active involvement of many of these authors, was the formation of the agile alliance. This group is a non-profit group intended to promote and research agile methods. Amongst other things it sponsors an annual conference in the US.&lt;br /&gt;
&lt;br /&gt;
===Agile Manifesto===&lt;br /&gt;
Manifesto for Agile Software development&lt;br /&gt;
&lt;br /&gt;
We are uncovering better ways of developing software by doing it and &lt;br /&gt;
helping others do it. Through this work we have come to value: &lt;br /&gt;
&lt;br /&gt;
'''Individuals and interactions''' over processes and tools&lt;br /&gt;
&lt;br /&gt;
'''working software''' over comprehensive documentation &lt;br /&gt;
&lt;br /&gt;
'''customer collaboration''' over contract negotiation&lt;br /&gt;
&lt;br /&gt;
'''responding to change''' over following a plan&lt;br /&gt;
&lt;br /&gt;
That is, while there is value in the items on the right, &lt;br /&gt;
we value the items on the left more.&lt;br /&gt;
&lt;br /&gt;
===Agile planning activities===&lt;br /&gt;
In non-iterative methodologies like waterfall, there is large upfront design, aiming to predict accurately how much work is involved in each project activity. This leads to a significant investment early in the project, when it is uncertain that the designed functionality is actually desired. Any agile approach to large-scale development has to avoid the reintroduction of the big design up front. One solution is to incorporate levels of planning incorporate a view of ‘the whole.' Agile planning activities for large-scale development efforts should rely on these five levels.&lt;br /&gt;
&lt;br /&gt;
'''Level 1''' - Product Visioning:&lt;br /&gt;
The highest-level view that the stakeholder can paint of the future is the product vision. In this vision, they explain what an organization or product should look like after project completion. They indicate what parts of the system need to change and what efforts can be used to achieve this goal.&lt;br /&gt;
&lt;br /&gt;
'''Level 2''' - Product Roadmap:&lt;br /&gt;
The era of large-scale projects that deliver results in years is behind us. Customers demand faster frequent changes, and delivery is measured in weeks or months. The higher frequency and smaller time-frames force a product owner into thinking in steps - into thinking of a road towards the final product. A product roadmap is created and communicated to fellow delivery people to provide a map so concept is more of a reality.&lt;br /&gt;
&lt;br /&gt;
'''Level 3''' - Release Planning:&lt;br /&gt;
In small projects, the product backlog can provide adequate project overview. The size, duration and deliverables are easily recognized, and there is no need to synchronize deliverables or teams. All of this changes when applying agile concepts to programs. The first time when routing activities and allocating them to teams occurs during release planning.&lt;br /&gt;
&lt;br /&gt;
'''Level 4''' - Iteration Planning:&lt;br /&gt;
For each iteration within the release, a planning session occurs to append detail and increase accuracy. Before or during the session, detail is added to the features by breaking them down into tasks. The actual capacity of the individual teams is known with more certainty than during the release planning session. The combination of these increased accuracies helps the team commit to delivering a number of features during the iteration with a high degree of certainty.&lt;br /&gt;
&lt;br /&gt;
'''Level 5''' - Daily Plan:&lt;br /&gt;
The stand-up meeting is part of everyday life for agile teams. This daily meeting is not often seen as a planning session, but it certainly is. The people look a day ahead, have learned from the earlier days in the iteration, and tell each other what they plan on doing. Issues are raised, possibly addressed, and the success of delivering the desired features within the iteration can be determined after the meeting.&lt;br /&gt;
&lt;br /&gt;
==Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
===Scrum===&lt;br /&gt;
Scrum is a lightweight management framework with broad applicability for managing iterative and incremental projects of all types. Ken Schwaber[http://en.wikipedia.org/wiki/Ken_Schwaber], Mike Beedle[http://en.wikipedia.org/wiki/Mike_Beedle], Jeff Sutherland[http://en.wikipedia.org/wiki/Jeff_Sutherland] and others contributed significantly to the evolution of Scrum over the last decade and a half. Over the last few years in particular, Scrum has garnered increasing popularity in the software community due to its simplicity, proven success and improved productivity, and its ability to act as a wrapper for various engineering practices promoted by other agile methodologies.[http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology]&lt;br /&gt;
&lt;br /&gt;
===Extreme Programming===&lt;br /&gt;
XP, originally devised by Kent Beck[http://en.wikipedia.org/wiki/Kent_Beck], has emerged as one of the more popular and controversial agile methods. XP is a disciplined approach to delivering high-quality software quickly and continuously. It promotes high customer involvement, rapid feedback loops, continuous testing, continuous planning, and close teamwork to deliver working software at very frequent intervals, typically every 1-3 weeks.&lt;br /&gt;
The original XP recipe is based on four simple values – simplicity, communication, feedback, and courage – and twelve supporting practices: Planning Game, Small Releases, Customer Acceptance Tests, Simple Design, Pair Programming, Test-Driven Development, Refactoring, Continuous Integration, Collective Code Ownership, Coding Standards, Metaphor and Sustainable Pace.[http://www.extremeprogramming.org/]&lt;br /&gt;
&lt;br /&gt;
===Dynamic Systems Development Method (DSDM)===&lt;br /&gt;
DSDM, dating back to 1994, grew out of the need to provide an industry standard project delivery framework for what was referred to as Rapid Application Development (RAD) at the time. While RAD was extremely popular in the early 1990’s, the RAD approach to software delivery evolved in a fairly unstructured manner. As a result, the DSDM Consortium was created and convened in 1994, with the goal of devising and promoting a common industry framework for rapid software delivery. Since 1994, the DSDM methodology has evolved and matured to provide a comprehensive foundation for planning, managing, executing, and scaling agile and iterative software development projects.&lt;br /&gt;
DSDM is based on nine key principles that primarily revolve around business needs/value, active user involvement, empowered teams, frequent delivery, integrated testing, and stakeholder collaboration. DSDM specifically calls out “fitness for business purpose” as the primary criteria for delivery and acceptance of a system, focusing on the useful 80% of the system that can be deployed in 20% of the time.[http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html]&lt;br /&gt;
&lt;br /&gt;
===Crystal===&lt;br /&gt;
The Crystal methodology is one of the most lightweight, adaptable approaches to software development. Crystal is actually comprised of a family of methodologies (Crystal Clear, Crystal Yellow, Crystal Orange, etc.) whose unique characteristics are driven by several factors such as team size, system criticality, and project priorities. This Crystal family addresses the realization that each project may require a slightly tailored set of policies, practices, and processes in order to meet the project’s unique characteristics.[http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html]&lt;br /&gt;
&lt;br /&gt;
===Lean Software Development===&lt;br /&gt;
Lean Software Development is an iterative methodology originally developed by Mary and Tom Poppendieck. Lean Software Development owes much of its principles and practices to the Lean Enterprise movement and the practices of companies like Toyota. Lean Software Development focuses the team on delivering value to the customer, and on the efficiency of the &amp;quot;Value Stream,&amp;quot; the mechanisms that deliver that value. The main principles of Lean include Eliminating Waste, Amplifying Learning, Deciding as Late as Possible, Delivering as Fast as Possible, Empowering the Team, Building Integrity In, and Seeing the Whole.&lt;br /&gt;
Lean eliminates waste by selecting only the truly valuable features for a system, prioritizing those selected, and delivering them in small batches. It emphasizes the speed and efficiency of development workflow, and relies on rapid and reliable feedback between programmers and customers.[http://www.projectperfect.com.au/info_lean_development.php]&lt;br /&gt;
&lt;br /&gt;
===Feature Driven Development (FDD)===&lt;br /&gt;
FDD was originally developed by Jeff De Luca, with contributions by M.A. Rajashima, Lim Bak Wee, Paul Szego, Jon Kern and Stephen Palmer. The first incarnations of FDD occurred as a result of collaboration between De Luca and OOD thought-leader Peter Coad. FDD is a model-driven, short-iteration process. It begins with establishing an overall model shape. Then it continues with a series of two-week &amp;quot;design by feature, build by feature&amp;quot; iterations. The features are small, &amp;quot;useful in the eyes of the client&amp;quot; results.&lt;br /&gt;
FDD designs the rest of the development process around feature delivery using the following eight practices: Domain Object Modeling, Developing by Feature, Component/Class Ownership, Feature Teams, Inspections, Configuration Management, Regular Builds, Visibility of Progress and Results.[http://www.nebulon.com/fdd/]&lt;br /&gt;
&lt;br /&gt;
===Other Methodologies===&lt;br /&gt;
Kanban [http://applicationengineering.blogspot.com/2009/06/kanban-agile.html] as applied to software development is a pull-based planning and execution method.  Rather than planning work items up front and pushing them into the work queue of a team, the team signals when they are ready for more work and pulls it into their queue. &lt;br /&gt;
Kanban historically uses cards to signal the need for an item.  For software development teams, these cards are kept on a Kanban Board which is organized into columns and rows.  The columns represent the different states of a work item, from initial planning through customer acceptance.  The specific columns a team uses should meet the needs of the team and be tailored to their context.  The rows on the Kanban Board represent work items.  Work items are sometimes grouped within areas, such as feature sets and category types.&lt;br /&gt;
Kanban focuses on maximizing the throughput of a team.  One of the ways it achieves this goal is through the application of Work-in-Process (WIP) limits in each of the states of a work item.  Under a Kanban (or Lean) approach, queues or inventories of work in any state are seen as waste.  The WIP limits enable a team to focus on the optimal flow of work items through the system, minimizing any associated waste.  Kanban allows teams to achieve process optimizations while respecting and maintaining a sustainable pace.&lt;br /&gt;
&lt;br /&gt;
==Comparison of different agile methodologies==&lt;br /&gt;
&lt;br /&gt;
[[File:Agile_comp.jpg]]&lt;br /&gt;
&lt;br /&gt;
===Limitations of Agile Methodologies===&lt;br /&gt;
The biggest limitation of agile methodologies is how they handle larger teams. Cockburn and Highsmith both conclude that “Agile development is more difficult for larger teams…as size grows coordinating interfaces become a dominant issue,”. Both Larry Constantine and Martin Fowler also believe that agile with face-to-face communication breaks down and becomes more difficult and complex with developers more than 20. In contrast, heavyweight and plan-driven methods scale better to large projects.&lt;br /&gt;
&lt;br /&gt;
Agile methodologies have a strong emphasis on customer involvement. The customer is considered as part of the development team throughout the whole development of the software. The Standish Group research topped this by providing the second most important factor for a project success is user involvement according to IT executive mangers opinion. According to Boehm, “Agile methods work best when such customers operate in dedicated mode with the development team, and when their tacit knowledge is sufficient for the full span of the application”. Again these methods risk tacit knowledge shortfall. If you have one customer participant then unless they are committed, knowledgeable, collaborative and empowered then there is some chance that you would have a unified set of requirements. However if you have many customers you would have different viewpoints and conflicts between them. This risk could be reduced in plan-driven methods by using documentation, planning, architecture reviews and independent expert project reviews to compensate for on-site customer negligence.&lt;br /&gt;
&lt;br /&gt;
Another factor of agile methodologies that could cause problems is the interpretation of the agile manifesto principle, “Working Software over Comprehensive Documentation”. Boehm[http://en.wikipedia.org/wiki/Barry_Boehm] questions the applicability of agiles’ emphasis on simplicity. Based on XP’s concept of YAGNI precept: “You Aren’t Going to Need It,” believes that doing extra work to get rid of architectural features that do not support the current version. This might cause misconceptions for the developers. This approach can be useful when the future requirements are highly unpredictable. However where future requirements are predictable, Boehm states “this practice not only throws away valuable architecture support for them, it also creates problems with the customers who want developers to believe that their priorities and evolution requirements are worth accommodating”.[http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf]&lt;br /&gt;
&lt;br /&gt;
==Adoption and Effectiveness of Agile Methodologies==&lt;br /&gt;
&lt;br /&gt;
'''Small team'''&lt;br /&gt;
-&lt;br /&gt;
Agile teams are restricted in size for several reasons:&lt;br /&gt;
The team has to self-organize, implying an efficient order emerging from&lt;br /&gt;
temporary chaos. Obviously this process would be too long for larger teams.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members have to be able to communicate spontaneously with each other&lt;br /&gt;
and with other stakeholders (i.e. without setting up meetings, sending emails,&lt;br /&gt;
etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
All team members participate in the day-to-day management (tasks, changes,&lt;br /&gt;
impediments, etc.).&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team members need to understand what others are doing (cross-functional&lt;br /&gt;
perspective, team ownership), help each other with ease, and collaborate without&lt;br /&gt;
centralized control.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
The team has to be co-located (this limitation will be examined later).&lt;br /&gt;
As you can see, agile is a highly participative style of software development.&lt;br /&gt;
Therefore, the number of participants significantly affects the efficiency of the process.&lt;br /&gt;
The daily scrum of the Scrum agile methodology perfectly illustrates this limitation. The&lt;br /&gt;
daily scrum is a 15 minutes meeting involving the whole team. The ScrumMaster (Scrum&lt;br /&gt;
word for team leader) goes around the table and each team member mentions the status&lt;br /&gt;
of tasks and other issues such as impediments or changes. I managed Scrum teams of&lt;br /&gt;
sizes varying from 3 to 8, and I must admit that in my opinion 8 is about the upper limit.&lt;br /&gt;
Beyond this size, communication becomes inefficient.&lt;br /&gt;
Assuming that large projects tend to require large teams, this restriction naturally&lt;br /&gt;
extends to project size.&lt;br /&gt;
&lt;br /&gt;
'''Collocated team'''&lt;br /&gt;
&lt;br /&gt;
Agile emphasizes that face-to-face, spontaneous conversation is the best form of&lt;br /&gt;
communication. While we can certainly agree on the benefits of this form of&lt;br /&gt;
communication, it severely limits agile applicability. Moreover, this agile principle extends&lt;br /&gt;
beyond the development team since other stakeholders such as business analysts are&lt;br /&gt;
required to be collocated.&lt;br /&gt;
What does it mean in practice? Imagine that a team member has a question concerninga use case. She should be able to get up, walk 10 meters, ask the business analyst orkey user for clarification, and get back to work. Consequently, office space has to bephysically arranged according to agile projects so that all stakeholders involved in dailyactivities are located at the same place (let's say within a minute of walking distance).&lt;br /&gt;
We can easily think of a number of situations where this limitation prevents using agile:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Office space organized by departments: In most organizations, offices are&lt;br /&gt;
organized by departments such as IT, marketing, accounting, sales, and so on.&lt;br /&gt;
Moving people around according to agile projects is unrealistic. Even if it was&lt;br /&gt;
possible, it would negatively affects other parts of the business.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Distributed environment: Developers are often distributed throughout the&lt;br /&gt;
organization, whether in the same branch or in different branches (or working&lt;br /&gt;
from home). Just like for the previous point, moving these people is unrealistic.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Subcontracting: Many organizations partly or completely outsource software&lt;br /&gt;
development. Assuming that some roles such as business analysts or key users&lt;br /&gt;
would be located at the company, this situation doesn't comply with the agile&lt;br /&gt;
collocation principle.&lt;br /&gt;
&lt;br /&gt;
'''Team ownership vs. individual accountability'''&lt;br /&gt;
&lt;br /&gt;
Agile development stresses the importance of team ownership in order to improve&lt;br /&gt;
teamwork and therefore overall results. Team ownership is a very appealing concept,&lt;br /&gt;
but how can we implement it since an organization's performance-reward system&lt;br /&gt;
assesses individual performance and rewards individuals, not teams?&lt;br /&gt;
&lt;br /&gt;
If we rely exclusively on individual accountability, we tend to generate selfish behavior&lt;br /&gt;
that can affect teamwork. If we rely exclusively on team assessment, we overlook that&lt;br /&gt;
individuals perform differently in a given team, creating opportunities for underperforming&lt;br /&gt;
team members to get away with it and lessening incentives to perform in a superior way.&lt;br /&gt;
Obviously we have to find a way to take both these perspectives into account.&lt;br /&gt;
Actually this problem can be solved elegantly by defining two levels of performance-&lt;br /&gt;
reward:&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Team level: The team is perceived as a single entity from management's point of&lt;br /&gt;
view. Management assesses teams' performance and allocates rewards to&lt;br /&gt;
teams in the form of points.&lt;br /&gt;
&lt;br /&gt;
−&lt;br /&gt;
Individual level: Team leaders (or whatever the title is) evaluate teams&lt;br /&gt;
members rewarding them with points.&lt;br /&gt;
In order to have a short feedback loop, assessment should be done frequently (every&lt;br /&gt;
month for example) using a lightweight system incurring very little administrative&lt;br /&gt;
overhead.&lt;br /&gt;
&lt;br /&gt;
Thanks to this kind of system, we encourage teamwork but we still take individual&lt;br /&gt;
contribution into account, effectively reaching a balance between team ownership and&lt;br /&gt;
individual accountability.[http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf]&lt;br /&gt;
&lt;br /&gt;
==Conclusion==&lt;br /&gt;
&lt;br /&gt;
Agile software development stresses rapid iterations, small and frequent releases, and evolving requirements&lt;br /&gt;
facilitated by direct user involvement in the development process. Serena’s application lifecycle management&lt;br /&gt;
tools provide a framework to visualize scope, orchestrate mundane and repetitive development tasks, and&lt;br /&gt;
enforce process. Unlike agile-specific products offered by agile-only vendors, Serena products are methodologyneutral&lt;br /&gt;
and can be applied equally well to agile as well as more traditional serial development processes, so&lt;br /&gt;
they can support all the development activities within an enterprise.&lt;br /&gt;
&lt;br /&gt;
Any team could be agile, regardless of the team size, but size is an issue because more people make&lt;br /&gt;
communication harder. There is much experience from small teams. There is less for larger teams, for&lt;br /&gt;
which scale-up strategies need to be applied.&lt;br /&gt;
&lt;br /&gt;
• Experience is important for an Agile project to succeed, but experience with actually building systems&lt;br /&gt;
is much more important than experience with Agile methods. It was estimated that 25%-33% of the&lt;br /&gt;
project personnel must be “competent and experienced”, but the necessary percentage might even be as&lt;br /&gt;
low as 10% if the teams practice pair programming due to the fact that they mentor each other.&lt;br /&gt;
&lt;br /&gt;
• Reliable and safety-critical projects can be conducted using Agile Methods. The key is that performance&lt;br /&gt;
requirements are made explicit early, and proper levels of testing are planned. It is easier to address&lt;br /&gt;
critical issues using Agile Methods since the customer gives requirements, makes important&lt;br /&gt;
things explicit early and provides continual input.&lt;br /&gt;
&lt;br /&gt;
• Agile Methods require less formal training than traditional methods. Pair programming helps minimize&lt;br /&gt;
what is needed in terms of training, because people mentor each other. This is more important than&lt;br /&gt;
regular training that can many times be completed as self-training. Training material is available in particular&lt;br /&gt;
for XP, Crystal, Scrum, and FDD.&lt;br /&gt;
&lt;br /&gt;
• The three most important success factors are culture, people, and communication. Agile Methods need&lt;br /&gt;
cultural support otherwise they will not succeed. Competent team members are crucial. Agile Methods&lt;br /&gt;
use fewer, but more competent people. Physically co-located teams and pair programming support&lt;br /&gt;
rapid communication. Close interaction with the customer and frequent customer feedback are critical&lt;br /&gt;
success factors.&lt;br /&gt;
&lt;br /&gt;
• Early warning signs can be spotted in Agile projects, e.g. low morale expressed during the daily meeting.&lt;br /&gt;
Other signs are production of “useless documentation” and delays of planned iterations.&lt;br /&gt;
&lt;br /&gt;
• Refactoring should be done frequently and of reasonably sized code, keeping the scope down and local.&lt;br /&gt;
Large-scale refactoring is not a problem, and is more feasible using Agile Methods. Big architectural changes do not&lt;br /&gt;
need to be risky if a set of automated tests is maintained.&lt;br /&gt;
&lt;br /&gt;
• Documentation should be assigned a cost and its extent be determined by the customer. Many&lt;br /&gt;
organizations demand more than is needed. The goal should be to communicate effectively and&lt;br /&gt;
documentation should be the last option.&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
1. http://en.wikipedia.org/wiki/Laissez-faire&lt;br /&gt;
2. http://en.wikipedia.org/wiki/Systems_development_life-cycle&lt;br /&gt;
3. http://en.wikipedia.org/wiki/Jim_Highsmith&lt;br /&gt;
4. http://en.wikipedia.org/wiki/Robert_Cecil_Martin&lt;br /&gt;
5. http://en.wikipedia.org/wiki/Ken_Schwaber&lt;br /&gt;
6. http://en.wikipedia.org/wiki/Mike_Beedle&lt;br /&gt;
7. http://en.wikipedia.org/wiki/Jeff_Sutherland&lt;br /&gt;
8. http://wiki.pentaho.com/display/OpenScrum/05.+Scrum+Methodology&lt;br /&gt;
9. http://en.wikipedia.org/wiki/Kent_Beck&lt;br /&gt;
10. http://www.extremeprogramming.org/&lt;br /&gt;
11. http://www.freetutes.com/systemanalysis/sa2-dynamic-system-development-method.html&lt;br /&gt;
12. http://weblogs.java.net/blog/chet/archive/2008/01/crystal_methodo.html&lt;br /&gt;
13. http://www.projectperfect.com.au/info_lean_development.php&lt;br /&gt;
14. http://www.nebulon.com/fdd/&lt;br /&gt;
15. http://applicationengineering.blogspot.com/2009/06/kanban-agile.html&lt;br /&gt;
16. http://en.wikipedia.org/wiki/Barry_Boehm&lt;br /&gt;
17. http://www4.in.tum.de/publ/papers/XP02.Limitations.pdf&lt;br /&gt;
18. http://upetd.up.ac.za/thesis/available/etd-02212011-125417/unrestricted/dissertation.pdf&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50576</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50576"/>
		<updated>2011-09-25T07:23:08Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages[http://en.wikipedia.org/wiki/Object-oriented_programming] came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// In Java&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&lt;br /&gt;
{&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&lt;br /&gt;
&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
this.number_of_wheels=count_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
return this.number_of_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String args[])&lt;br /&gt;
{&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&lt;br /&gt;
c1.setWheels(4);&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based.  &lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Class based object oriented languages''' ===&lt;br /&gt;
Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Prototype based object oriented languages''' ===&lt;br /&gt;
Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''When to use scripting languages?''' ===&lt;br /&gt;
Scripting languages are used when the speed of development is more important than the speed of execution. One instance that answers the question that &amp;quot;When to use scripting languages?&amp;quot; is that, say we have a ton of numeric data in a file and we need to sort all the numbers within the file, in such scenario scripting comes handy as we can do sorting by collecting the file data in a list / array (list_name) and then calling the sort(@list_name) procedure. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//sort function written in C++&lt;br /&gt;
void class_name::sort(int a[],length)&lt;br /&gt;
{&lt;br /&gt;
int i,j,temp;&lt;br /&gt;
for(i=0;i&amp;lt;length;i++)&lt;br /&gt;
   for(j=1;j&amp;lt;length;j++)&lt;br /&gt;
        if(a[i]&amp;lt;a[j])&lt;br /&gt;
        {&lt;br /&gt;
         temp=a[i];               //temp variable is used to swap the values iff a[i] &amp;lt; a[j]&lt;br /&gt;
         a[i]=a[j];&lt;br /&gt;
         a[j]=temp;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AS you can see for sorting a array / list we have to write modules in object oriented languages. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array;                            #this snippet is written in Perl&lt;br /&gt;
@array1=sort(@array);              #thus array 1 will contain the sorted list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In scripting languages the library has functions like sort that make the task of developers much easier especially when a deliverable is due soon and if a developer has a imminent deadline.  &lt;br /&gt;
&lt;br /&gt;
Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC [http://en.wikipedia.org/wiki/Source_lines_of_code] compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Snippet built in c++&lt;br /&gt;
//sum has a local scope &lt;br /&gt;
int class_name::sum_of_num(int a, int b)&lt;br /&gt;
{&lt;br /&gt;
sum = a + b;&lt;br /&gt;
return sum;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this code the compiler will throw an exception saying that &amp;quot;sum&amp;quot; is a variable that is not defined. This is because the compiler needs to know at runtime the data type of all the variables used.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
def sum_of_num(a,b)               #this function is written in Ruby &lt;br /&gt;
@sum=a+b&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since most of the scripting languages are dynamically typed i.e we need not specify the data types of the variables. The compiler determines the data type automatically at runtime. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl, Ruby etc. one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//This code snippet is built in C++&lt;br /&gt;
int a[100];&lt;br /&gt;
char b[100];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the compiler encounters these declarations the compiler will reserve 100 integer blocks for a and 100 character blocks for b. We must ensure that we do not exceed 100 entities in both the above arrays. If we do so we will get a segmentation fault. This can be overcome by using dynamic allocation of memory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array=[1, &amp;quot;metallica&amp;quot;, 3.14, 6];               #Perl array declaration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus we observe that in most scripting languages we can store any data type element in an array and access individual element by their index. Scripting has many functions that allows developers to play with an array. Check the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$last=pop(@array);               #pop method will store 6 in $last&lt;br /&gt;
push @array,8                    #will store 8 in the last location&lt;br /&gt;
$first=shift @array              #will return and delete the first element from the array and assign to $first&lt;br /&gt;
unshift(@array,3)                #will add 3 to the beginning of the array. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Just imagine if you were to implement these function in an object oriented languages it would take a lot of effort and lines of code to build the same functionality which in case of scripting will take just a few lines of code. &lt;br /&gt;
&lt;br /&gt;
Scripting languages make use of negative index for arrays to read an array backward. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array = [1,2,3,4,5];&lt;br /&gt;
print array[-1];               #-1 will return the last element in the array i.e 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&lt;br /&gt;
$a=3.16;&lt;br /&gt;
$b=4.56 + $a;&lt;br /&gt;
$c=5 + $a;&lt;br /&gt;
print $b;&lt;br /&gt;
print $c;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Comparison between Scripting languages and Object Oriented languages''' == &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Features&lt;br /&gt;
! Ruby&lt;br /&gt;
! Java&lt;br /&gt;
! Perl&lt;br /&gt;
! C#&lt;br /&gt;
! C++&lt;br /&gt;
! Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
| Object Orientation&lt;br /&gt;
| Pure&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Add-on / Hybrid&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Hybrid / Multi-Paradigm&lt;br /&gt;
| Partial support&lt;br /&gt;
|-&lt;br /&gt;
| Static / Dynamic typing&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
|-&lt;br /&gt;
| Generic classes&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Inheritance&lt;br /&gt;
| Single class, multiple &amp;quot;mixins&amp;quot;&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| Regular expressions&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Operator Overloading&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
|} [http://www.jvoegele.com/software/langcomp.html] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
14 http://en.wikipedia.org/wiki/Source_lines_of_code &amp;lt;br /&amp;gt;&lt;br /&gt;
15 http://perldoc.perl.org/functions/sort.html &amp;lt;br /&amp;gt;&lt;br /&gt;
16 http://www.jvoegele.com/software/langcomp.html&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50575</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50575"/>
		<updated>2011-09-25T07:20:29Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages[http://en.wikipedia.org/wiki/Object-oriented_programming] came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// In Java&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&lt;br /&gt;
{&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&lt;br /&gt;
&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
this.number_of_wheels=count_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
return this.number_of_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String args[])&lt;br /&gt;
{&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&lt;br /&gt;
c1.setWheels(4);&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based.  &lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Class based object oriented languages''' ===&lt;br /&gt;
Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Prototype based object oriented languages''' ===&lt;br /&gt;
Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''When to use scripting languages?''' ===&lt;br /&gt;
Scripting languages are used when the speed of development is more important than the speed of execution. One instance that answers the question that &amp;quot;When to use scripting languages?&amp;quot; is that, say we have a ton of numeric data in a file and we need to sort all the numbers within the file, in such scenario scripting comes handy as we can do sorting by collecting the file data in a list / array (list_name) and then calling the sort(@list_name) procedure. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//sort function written in C++&lt;br /&gt;
void class_name::sort(int a[],length)&lt;br /&gt;
{&lt;br /&gt;
int i,j,temp;&lt;br /&gt;
for(i=0;i&amp;lt;length;i++)&lt;br /&gt;
   for(j=1;j&amp;lt;length;j++)&lt;br /&gt;
        if(a[i]&amp;lt;a[j])&lt;br /&gt;
        {&lt;br /&gt;
         temp=a[i];               //temp variable is used to swap the values iff a[i] &amp;lt; a[j]&lt;br /&gt;
         a[i]=a[j];&lt;br /&gt;
         a[j]=temp;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AS you can see for sorting a array / list we have to write modules in object oriented languages. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array;                            #this snippet is written in Perl&lt;br /&gt;
@array1=sort(@array)               #thus array 1 will contain the sorted list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In scripting languages the library has functions like sort that make the task of developers much easier especially when a deliverable is due soon and if a developer has a imminent deadline.  &lt;br /&gt;
&lt;br /&gt;
Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC [http://en.wikipedia.org/wiki/Source_lines_of_code] compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Snippet built in c++&lt;br /&gt;
//sum has a local scope &lt;br /&gt;
int class_name::sum_of_num(int a, int b)&lt;br /&gt;
{&lt;br /&gt;
sum = a + b;&lt;br /&gt;
return sum;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this code the compiler will throw an exception saying that &amp;quot;sum&amp;quot; is a variable that is not defined. This is because the compiler needs to know at runtime the data type of all the variables used.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
def sum_of_num(a,b)               #this function is written in Ruby &lt;br /&gt;
@sum=a+b&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since most of the scripting languages are dynamically typed i.e we need not specify the data types of the variables. The compiler determines the data type automatically at runtime. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl, Ruby etc. one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//This code snippet is built in C++&lt;br /&gt;
int a[100];&lt;br /&gt;
char b[100];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the compiler encounters these declarations the compiler will reserve 100 integer blocks for a and 100 character blocks for b. We must ensure that we do not exceed 100 entities in both the above arrays. If we do so we will get a segmentation fault. This can be overcome by using dynamic allocation of memory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array=[1, &amp;quot;metallica&amp;quot;, 3.14, 6];               #Perl array declaration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus we observe that in most scripting languages we can store any data type element in an array and access individual element by their index. Scripting has many functions that allows developers to play with an array. Check the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$last=pop(@array);               #pop method will store 6 in $last&lt;br /&gt;
push @array,8                    #will store 8 in the last location&lt;br /&gt;
$first=shift @array              #will return and delete the first element from the array and assign to $first&lt;br /&gt;
unshift(@array,3)                #will add 3 to the beginning of the array. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Just imagine if you were to implement these function in an object oriented languages it would take a lot of effort and lines of code to build the same functionality which in case of scripting will take just a few lines of code. &lt;br /&gt;
&lt;br /&gt;
Scripting languages make use of negative index for arrays to read an array backward. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array = [1,2,3,4,5]&lt;br /&gt;
print array[-1];               #-1 will return the last element in the array i.e 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&lt;br /&gt;
$a=3.16;&lt;br /&gt;
$b=4.56 + $a;&lt;br /&gt;
$c=5 + $a;&lt;br /&gt;
print $b;&lt;br /&gt;
print $c;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Comparison between Scripting languages and Object Oriented languages''' == &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Features&lt;br /&gt;
! Ruby&lt;br /&gt;
! Java&lt;br /&gt;
! Perl&lt;br /&gt;
! C#&lt;br /&gt;
! C++&lt;br /&gt;
! Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
| Object Orientation&lt;br /&gt;
| Pure&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Add-on / Hybrid&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Hybrid / Multi-Paradigm&lt;br /&gt;
| Partial support&lt;br /&gt;
|-&lt;br /&gt;
| Static / Dynamic typing&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
|-&lt;br /&gt;
| Generic classes&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Inheritance&lt;br /&gt;
| Single class, multiple &amp;quot;mixins&amp;quot;&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| Regular expressions&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Operator Overloading&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
|} [http://www.jvoegele.com/software/langcomp.html] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
14 http://en.wikipedia.org/wiki/Source_lines_of_code &amp;lt;br /&amp;gt;&lt;br /&gt;
15 http://perldoc.perl.org/functions/sort.html &amp;lt;br /&amp;gt;&lt;br /&gt;
16 http://www.jvoegele.com/software/langcomp.html&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50574</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50574"/>
		<updated>2011-09-25T07:20:03Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages[http://en.wikipedia.org/wiki/Object-oriented_programming] came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// In Java&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&lt;br /&gt;
{&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&lt;br /&gt;
&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
this.number_of_wheels=count_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
return this.number_of_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String args[])&lt;br /&gt;
{&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&lt;br /&gt;
c1.setWheels(4);&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based.  &lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Class based object oriented languages''' ===&lt;br /&gt;
Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Prototype based object oriented languages''' ===&lt;br /&gt;
Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''When to use scripting languages?''' ===&lt;br /&gt;
Scripting languages are used when the speed of development is more important than the speed of execution. One instance that answers the question that &amp;quot;When to use scripting languages?&amp;quot; is that, say we have a ton of numeric data in a file and we need to sort all the numbers within the file, in such scenario scripting comes handy as we can do sorting by collecting the file data in a list / array (list_name) and then calling the sort(@list_name) procedure. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//sort function written in C++&lt;br /&gt;
void class_name::sort(int a[],length)&lt;br /&gt;
{&lt;br /&gt;
int i,j,temp;&lt;br /&gt;
for(i=0;i&amp;lt;length;i++)&lt;br /&gt;
   for(j=1;j&amp;lt;length;j++)&lt;br /&gt;
        if(a[i]&amp;lt;a[j])&lt;br /&gt;
        {&lt;br /&gt;
         temp=a[i];               //temp variable is used to swap the values iff a[i] &amp;lt; a[j]&lt;br /&gt;
         a[i]=a[j];&lt;br /&gt;
         a[j]=temp;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AS you can see for sorting a array / list we have to write modules in object oriented languages. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array;                            #this snippet is written in Perl&lt;br /&gt;
@array1=sort(@array)               #thus array 1 will contain the sorted list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In scripting languages the library has functions like sort that make the task of developers much easier especially when a deliverable is due soon and if a developer has a imminent deadline.  &lt;br /&gt;
&lt;br /&gt;
Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC [http://en.wikipedia.org/wiki/Source_lines_of_code] compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Snippet built in c++&lt;br /&gt;
//sum has a local scope &lt;br /&gt;
int class_name::sum_of_num(int a, int b)&lt;br /&gt;
{&lt;br /&gt;
sum = a + b;&lt;br /&gt;
return sum;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this code the compiler will throw an exception saying that &amp;quot;sum&amp;quot; is a variable that is not defined. This is because the compiler needs to know at runtime the data type of all the variables used.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
def sum_of_num(a,b)               #this function is written in Ruby &lt;br /&gt;
@sum=a+b&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since most of the scripting languages are dynamically typed i.e we need not specify the data types of the variables. The compiler determines the data type automatically at runtime. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl, Ruby etc. one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//This code snippet is built in C++&lt;br /&gt;
int a[100];&lt;br /&gt;
char b[100];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the compiler encounters these declarations the compiler will reserve 100 integer blocks for a and 100 character blocks for b. We must ensure that we do not exceed 100 entities in both the above arrays. If we do so we will get a segmentation fault. This can be overcome by using dynamic allocation of memory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array=[1, &amp;quot;metallica&amp;quot;, 3.14, 6];               #Perl array declaration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus we observe that in most scripting languages we can store any data type element in an array and access individual element by their index. Scripting has many functions that allows developers to play with an array. Check the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$last=pop(@array);               #pop method will store 6 in $last&lt;br /&gt;
push @array,8                    #will store 8 in the last location&lt;br /&gt;
$first=shift @array              #will return and delete the first element from the array and assign to $first&lt;br /&gt;
unshift(@array,3)                #will add 3 to the beginning of the array. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Just imagine if you were to implement these function in an object oriented languages it would take a lot of effort and lines of code to build the same functionality which in case of scripting will take just a few lines of code. &lt;br /&gt;
&lt;br /&gt;
Scripting languages make use of negative index for arrays to read an array backward. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array = [1,2,3,4,5]&lt;br /&gt;
print array[-1];               #-1 will return the last element in the array i.e 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&lt;br /&gt;
$a=3.16;&lt;br /&gt;
$b=4.56 + $a;&lt;br /&gt;
$c=5 + $a;&lt;br /&gt;
print $b;&lt;br /&gt;
print $c;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Comparison between Scripting languages and Object Oriented languages''' == &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Features&lt;br /&gt;
! Ruby&lt;br /&gt;
! Java&lt;br /&gt;
! Perl&lt;br /&gt;
! C#&lt;br /&gt;
! C++&lt;br /&gt;
! Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
| Object Orientation&lt;br /&gt;
| Pure&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Add-on / Hybrid&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Hybrid / Multi-Paradigm&lt;br /&gt;
| Partial support&lt;br /&gt;
|-&lt;br /&gt;
| Static / Dynamic typing&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
|-&lt;br /&gt;
| Generic classes&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Inheritance&lt;br /&gt;
| Single class, multiple &amp;quot;mixins&amp;quot;&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| Regular expressions&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Operator Overloading&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
|} [http://www.jvoegele.com/software/langcomp.html] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
14 http://en.wikipedia.org/wiki/Source_lines_of_code &amp;lt;br /&amp;gt;&lt;br /&gt;
15 http://perldoc.perl.org/functions/sort.html&lt;br /&gt;
16 http://www.jvoegele.com/software/langcomp.html&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50573</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50573"/>
		<updated>2011-09-25T07:18:41Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages[http://en.wikipedia.org/wiki/Object-oriented_programming] came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// In Java&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&lt;br /&gt;
{&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&lt;br /&gt;
&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
this.number_of_wheels=count_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
return this.number_of_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String args[])&lt;br /&gt;
{&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&lt;br /&gt;
c1.setWheels(4);&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based.  &lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Class based object oriented languages''' ===&lt;br /&gt;
Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Prototype based object oriented languages''' ===&lt;br /&gt;
Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''When to use scripting languages?''' ===&lt;br /&gt;
Scripting languages are used when the speed of development is more important than the speed of execution. One instance that answers the question that &amp;quot;When to use scripting languages?&amp;quot; is that, say we have a ton of numeric data in a file and we need to sort all the numbers within the file, in such scenario scripting comes handy as we can do sorting by collecting the file data in a list / array (list_name) and then calling the sort(@list_name) procedure. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//sort function written in C++&lt;br /&gt;
void class_name::sort(int a[],length)&lt;br /&gt;
{&lt;br /&gt;
int i,j,temp;&lt;br /&gt;
for(i=0;i&amp;lt;length;i++)&lt;br /&gt;
   for(j=1;j&amp;lt;length;j++)&lt;br /&gt;
        if(a[i]&amp;lt;a[j])&lt;br /&gt;
        {&lt;br /&gt;
         temp=a[i];               //temp variable is used to swap the values iff a[i] &amp;lt; a[j]&lt;br /&gt;
         a[i]=a[j];&lt;br /&gt;
         a[j]=temp;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AS you can see for sorting a array / list we have to write modules in object oriented languages. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array;                            #this snippet is written in Perl&lt;br /&gt;
@array1=sort(@array)               #thus array 1 will contain the sorted list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In scripting languages the library has functions like sort that make the task of developers much easier especially when a deliverable is due soon and if a developer has a imminent deadline.  &lt;br /&gt;
&lt;br /&gt;
Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC [http://en.wikipedia.org/wiki/Source_lines_of_code] compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Snippet built in c++&lt;br /&gt;
//sum has a local scope &lt;br /&gt;
int class_name::sum_of_num(int a, int b)&lt;br /&gt;
{&lt;br /&gt;
sum = a + b;&lt;br /&gt;
return sum;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this code the compiler will throw an exception saying that &amp;quot;sum&amp;quot; is a variable that is not defined. This is because the compiler needs to know at runtime the data type of all the variables used.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
def sum_of_num(a,b)               #this function is written in Ruby &lt;br /&gt;
@sum=a+b&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since most of the scripting languages are dynamically typed i.e we need not specify the data types of the variables. The compiler determines the data type automatically at runtime. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl, Ruby etc. one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//This code snippet is built in C++&lt;br /&gt;
int a[100];&lt;br /&gt;
char b[100];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the compiler encounters these declarations the compiler will reserve 100 integer blocks for a and 100 character blocks for b. We must ensure that we do not exceed 100 entities in both the above arrays. If we do so we will get a segmentation fault. This can be overcome by using dynamic allocation of memory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array=[1, &amp;quot;metallica&amp;quot;, 3.14, 6];               #Perl array declaration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus we observe that in most scripting languages we can store any data type element in an array and access individual element by their index. Scripting has many functions that allows developers to play with an array. Check the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$last=pop(@array);               #pop method will store 6 in $last&lt;br /&gt;
push @array,8                    #will store 8 in the last location&lt;br /&gt;
$first=shift @array              #will return and delete the first element from the array and assign to $first&lt;br /&gt;
unshift(@array,3)                #will add 3 to the beginning of the array. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Just imagine if you were to implement these function in an object oriented languages it would take a lot of effort and lines of code to build the same functionality which in case of scripting will take just a few lines of code. &lt;br /&gt;
&lt;br /&gt;
Scripting languages make use of negative index for arrays to read an array backward. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array = [1,2,3,4,5]&lt;br /&gt;
print array[-1];               #-1 will return the last element in the array i.e 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&lt;br /&gt;
$a=3.16;&lt;br /&gt;
$b=4.56 + $a;&lt;br /&gt;
$c=5 + $a;&lt;br /&gt;
print $b;&lt;br /&gt;
print $c;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Comparison between Scripting languages and Object Oriented languages''' == &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Features&lt;br /&gt;
! Ruby&lt;br /&gt;
! Java&lt;br /&gt;
! Perl&lt;br /&gt;
! C#&lt;br /&gt;
! C++&lt;br /&gt;
! Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
| Object Orientation&lt;br /&gt;
| Pure&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Add-on / Hybrid&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Hybrid / Multi-Paradigm&lt;br /&gt;
| Partial support&lt;br /&gt;
|-&lt;br /&gt;
| Static / Dynamic typing&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
|-&lt;br /&gt;
| Generic classes&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Inheritance&lt;br /&gt;
| Single class, multiple &amp;quot;mixins&amp;quot;&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| Regular expressions&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Operator Overloading&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
|} [http://www.jvoegele.com/software/langcomp.html] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
14 http://en.wikipedia.org/wiki/Source_lines_of_code &amp;lt;br /&amp;gt;&lt;br /&gt;
15 http://www.jvoegele.com/software/langcomp.html&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50572</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=50572"/>
		<updated>2011-09-25T07:15:35Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages[http://en.wikipedia.org/wiki/Object-oriented_programming] came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// In Java&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&lt;br /&gt;
{&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&lt;br /&gt;
&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
this.number_of_wheels=count_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
return this.number_of_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String args[])&lt;br /&gt;
{&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&lt;br /&gt;
c1.setWheels(4);&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based.  &lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Class based object oriented languages''' ===&lt;br /&gt;
Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''Prototype based object oriented languages''' ===&lt;br /&gt;
Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== '''When to use scripting languages?''' ===&lt;br /&gt;
Scripting languages are used when the speed of development is more important than the speed of execution. One instance that answers the question that &amp;quot;When to use scripting languages?&amp;quot; is that, say we have a ton of numeric data in a file and we need to sort all the numbers within the file, in such scenario scripting comes handy as we can do sorting by collecting the file data in a list / array (list_name) and then calling the sort(@list_name) procedure. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//sort function written in C++&lt;br /&gt;
void class_name::sort(int a[],length)&lt;br /&gt;
{&lt;br /&gt;
int i,j,temp;&lt;br /&gt;
for(i=0;i&amp;lt;length;i++)&lt;br /&gt;
   for(j=1;j&amp;lt;length;j++)&lt;br /&gt;
        if(a[i]&amp;lt;a[j])&lt;br /&gt;
        {&lt;br /&gt;
         temp=a[i];               //temp variable is used to swap the values iff a[i] &amp;lt; a[j]&lt;br /&gt;
         a[i]=a[j];&lt;br /&gt;
         a[j]=temp;&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
AS you can see for sorting a array / list we have to write modules in object oriented languages. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array;                            #this snippet is written in Perl&lt;br /&gt;
@array1=sort(@array)               #thus array 1 will contain the sorted list&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In scripting languages the library has functions like sort that make the task of developers much easier especially when a deliverable is due soon and if a developer has a imminent deadline.  &lt;br /&gt;
&lt;br /&gt;
Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC [http://en.wikipedia.org/wiki/Source_lines_of_code] compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//Snippet built in c++&lt;br /&gt;
//sum has a local scope &lt;br /&gt;
int class_name::sum_of_num(int a, int b)&lt;br /&gt;
{&lt;br /&gt;
sum = a + b;&lt;br /&gt;
return sum;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If we compile this code the compiler will throw an exception saying that &amp;quot;sum&amp;quot; is a variable that is not defined. This is because the compiler needs to know at runtime the data type of all the variables used.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; &lt;br /&gt;
def sum_of_num(a,b)               #this function is written in Ruby &lt;br /&gt;
@sum=a+b&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since most of the scripting languages are dynamically typed i.e we need not specify the data types of the variables. The compiler determines the data type automatically at runtime. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl, Ruby etc. one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//This code snippet is built in C++&lt;br /&gt;
int a[100];&lt;br /&gt;
char b[100];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the compiler encounters these declarations the compiler will reserve 100 integer blocks for a and 100 character blocks for b. We must ensure that we do not exceed 100 entities in both the above arrays. If we do so we will get a segmentation fault. This can be overcome by using dynamic allocation of memory. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array=[1, &amp;quot;metallica&amp;quot;, 3.14, 6];               #Perl array declaration&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thus we observe that in most scripting languages we can store any data type element in an array and access individual element by their index. Scripting has many functions that allows developers to play with an array. Check the following example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$last=pop(@array);               #pop method will store 6 in $last&lt;br /&gt;
push @array,8                    #will store 8 in the last location&lt;br /&gt;
$first=shift @array              #will return and delete the first element from the array and assign to $first&lt;br /&gt;
unshift(@array,3)                #will add 3 to the beginning of the array. &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Just imagine if you were to implement these function in an object oriented languages it would take a lot of effort and lines of code to build the same functionality which in case of scripting will take just a few lines of code. &lt;br /&gt;
&lt;br /&gt;
Scripting languages make use of negative index for arrays to read an array backward. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@array = [1,2,3,4,5]&lt;br /&gt;
print array[-1];               #-1 will return the last element in the array i.e 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&lt;br /&gt;
$a=3.16;&lt;br /&gt;
$b=4.56 + $a;&lt;br /&gt;
$c=5 + $a;&lt;br /&gt;
print $b;&lt;br /&gt;
print $c;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Comparison between Scripting languages and Object Oriented languages''' == &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Features&lt;br /&gt;
! Ruby&lt;br /&gt;
! Java&lt;br /&gt;
! Perl&lt;br /&gt;
! C#&lt;br /&gt;
! C++&lt;br /&gt;
! Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
| Object Orientation&lt;br /&gt;
| Pure&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Add-on / Hybrid&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Hybrid / Multi-Paradigm&lt;br /&gt;
| Partial support&lt;br /&gt;
|-&lt;br /&gt;
| Static / Dynamic typing&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
|-&lt;br /&gt;
| Generic classes&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Inheritance&lt;br /&gt;
| Single class, multiple &amp;quot;mixins&amp;quot;&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| Regular expressions&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Operator Overloading&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
|} [http://www.jvoegele.com/software/langcomp.html] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
14 http://en.wikipedia.org/wiki/Source_lines_of_code &amp;lt;br /&amp;gt;&lt;br /&gt;
15 http://www.jvoegele.com/software/langcomp.html&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48608</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48608"/>
		<updated>2011-09-13T05:40:16Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// In Java&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&lt;br /&gt;
{&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&lt;br /&gt;
&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
this.number_of_wheels=count_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
return this.number_of_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String args[])&lt;br /&gt;
{&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&lt;br /&gt;
c1.setWheels(4);&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based. Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc. Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database. Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages  &lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&lt;br /&gt;
$a=3.16;&lt;br /&gt;
$b=4.56 + $a;&lt;br /&gt;
$c=5 + $a;&lt;br /&gt;
print $b;&lt;br /&gt;
print $c;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Comparison between Scripting languages and Object Oriented languages''' == &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Features&lt;br /&gt;
! Ruby&lt;br /&gt;
! Java&lt;br /&gt;
! Perl&lt;br /&gt;
! C#&lt;br /&gt;
! C++&lt;br /&gt;
! Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
| Object Orientation&lt;br /&gt;
| Pure&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Add-on / Hybrid&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Hybrid / Multi-Paradigm&lt;br /&gt;
| Partial support&lt;br /&gt;
|-&lt;br /&gt;
| Static / Dynamic typing&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
|-&lt;br /&gt;
| Generic classes&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Inheritance&lt;br /&gt;
| Single class, multiple &amp;quot;mixins&amp;quot;&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| Regular expressions&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Operator Overloading&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
|} [http://www.jvoegele.com/software/langcomp.html] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;br /&gt;
14 http://www.jvoegele.com/software/langcomp.html&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48607</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48607"/>
		<updated>2011-09-13T05:38:19Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// In Java&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&lt;br /&gt;
{&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&lt;br /&gt;
&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
this.number_of_wheels=count_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&lt;br /&gt;
{&lt;br /&gt;
return this.number_of_wheels;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public static void main(String args[])&lt;br /&gt;
{&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&lt;br /&gt;
c1.setWheels(4);&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based. Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc. Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database. Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages  &lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&lt;br /&gt;
$a=3.16;&lt;br /&gt;
$b=4.56 + $a;&lt;br /&gt;
$c=5 + $a;&lt;br /&gt;
print $b;&lt;br /&gt;
print $c;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Comparison between Scripting languages and Object Oriented languages''' ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Features&lt;br /&gt;
! Ruby&lt;br /&gt;
! Java&lt;br /&gt;
! Perl&lt;br /&gt;
! C#&lt;br /&gt;
! C++&lt;br /&gt;
! Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
| Object Orientation&lt;br /&gt;
| Pure&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Add-on / Hybrid&lt;br /&gt;
| Hybrid&lt;br /&gt;
| Hybrid / Multi-Paradigm&lt;br /&gt;
| Partial support&lt;br /&gt;
|-&lt;br /&gt;
| Static / Dynamic typing&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Dynamic&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
| Static&lt;br /&gt;
|-&lt;br /&gt;
| Generic classes&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| N/A&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Inheritance&lt;br /&gt;
| Single class, multiple &amp;quot;mixins&amp;quot;&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| Single class multiple interfaces&lt;br /&gt;
| Multiple&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| Regular expressions&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| Built in&lt;br /&gt;
| Standard library&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
| Operator Overloading&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48606</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48606"/>
		<updated>2011-09-13T04:47:29Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'''// In Java'''&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
this.number_of_wheels=count_wheels;&amp;lt;br /&amp;gt;&lt;br /&gt;
}&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
return this.number_of_wheels;&amp;lt;br /&amp;gt;&lt;br /&gt;
}&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
public static void main(String args[])&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&amp;lt;br /&amp;gt;&lt;br /&gt;
c1.setWheels(4);&amp;lt;br /&amp;gt;&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based. Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc. Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database. Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages  &lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$a=4;&amp;lt;br /&amp;gt;&lt;br /&gt;
$a=3.16;&amp;lt;br /&amp;gt;&lt;br /&gt;
$b=4.56 + $a;&amp;lt;br /&amp;gt;&lt;br /&gt;
$c=5 + $a;&amp;lt;br /&amp;gt;&lt;br /&gt;
print $b;&amp;lt;br /&amp;gt;&lt;br /&gt;
print $c;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48603</id>
		<title>Csc/ece 517 fall 2011/ch1 1g aa</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Csc/ece_517_fall_2011/ch1_1g_aa&amp;diff=48603"/>
		<updated>2011-09-11T07:36:26Z</updated>

		<summary type="html">&lt;p&gt;Aakalker: Obect-oriented languages and scripting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== '''Introduction''' ==&lt;br /&gt;
Object Oriented Languages came into existence in 1960's when there was major focus on Procedural Languages[http://en.wikipedia.org/wiki/Procedural_programming] with respect to  polymorphism, modularization and data abstraction. The major entity in object oriented languages is object. Object [http://en.wikipedia.org/wiki/Object_(computer_science)] is an instance of a Class [http://en.wikipedia.org/wiki/Class_(computer_programming)] and Class acts as a blueprint for  an  Object.Class consists of methods and data that instances of class operate on. Methods in object-oriented is same as functions or subroutine [http://en.wikipedia.org/wiki/Subroutine] in procedural programming. Data in object oriented programming is used to store the state of an object.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example: &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''// In Java'''&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
class Car  		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;//Class&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
int number_of_wheels=0;				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// state of an object&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
public void setWheels(int count_wheels)		&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
this.number_of_wheels=count_wheels;&amp;lt;br /&amp;gt;&lt;br /&gt;
}&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
public int getWheels()				&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;// property of an object&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
return this.number_of_wheels;&amp;lt;br /&amp;gt;&lt;br /&gt;
}&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
public static void main(String args[])&amp;lt;br /&amp;gt;&lt;br /&gt;
{&amp;lt;br /&amp;gt;&lt;br /&gt;
Car c1=new Car();	  			&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;	// Object creation&amp;lt;br /&amp;gt;&lt;br /&gt;
c1.setWheels(4);&amp;lt;br /&amp;gt;&lt;br /&gt;
System.out.println(“Car has ”+c1.getWheels()+” wheels”);&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
The four major principles of Object-oriented Languages are:&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Polymorphism [http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming]&amp;lt;br /&amp;gt;&lt;br /&gt;
* Inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Abstraction [http://en.wikipedia.org/wiki/Abstraction_(computer_science)] &amp;lt;br /&amp;gt;&lt;br /&gt;
* Encapsulation [http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming)]&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Classification of Object Oriented Languages''' ==&lt;br /&gt;
Object Oriented Languages are being classified into two types: Class-based and prototype-based. Class-based Object Oriented Languages mainly focus on creation of objects using classes. Classes includes both state and properties of an object(instance of class).Some  examples of commonly used class based object oriented languages are Ada, C++, C#, Cobra, Fortran, Java, Perl, PHP, Python, Ruby, Scala, Smalltalk, VBScript etc. Prototype-based Object Oriented Languages are those in which there exists no difference between classes and objects. Some examples of commonly used prototype-based languages are ABCL, Cecil, ActionScript, JavaScript, Lisaac, NewtonScipt, Slate, TADS etc.&lt;br /&gt;
Among these two kinds of object-oriented languages, there are many scripting languages which possesses  prominent Object Oriented features. Some of the scripting languages that comes into this category are ActionScript, JavaScript, Groovy, Perl, PHP, Python, Ruby, Smalltalk, VBScript, Windows PowerShell etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Scripting Languages''' ==&lt;br /&gt;
A scripting language is a high level programming language that interprets a normal interactive program and allocates it a list of tasks that need to be done by the program at runtime [http://www.webopedia.com/TERM/S/scripting_language.html]. Scripting languages gained popularity as internet became a powerful communication tool. Scripting languages can be used on the client side and on the server side. On the client side, scripts can be used to change data that end user views in the browser window. While on the server side, scripts can be used to manipulate data in the repository / database. Some of the popular scripting languages include Perl, Python, PHP, JavaScript, Active Server Pages, JSP , Tcl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Benefits of Object Oriented Languages to Scripting Languages''' ==&lt;br /&gt;
* Inheritance : Some of the object oriented languages implements multiple inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)] and some implements multi-level inheritance [http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)]. The perfect example of scripting language that implements multiple inheritance is Python and multi-level inheritance is Ruby.&lt;br /&gt;
&lt;br /&gt;
* Access Modifiers [http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers] : Object Oriented features of using the access modifiers (public, protected, private) for member variables and methods helped scripting languages in controlling the access to the same. Access modifiers are being commonly used in most of the scripting languages like Ruby.&lt;br /&gt;
&lt;br /&gt;
* Polymorphism : This feature helps Scripting languages to override methods that are already present in base class and overload the methods present in base class or its own class. Good example for the same is method overriding in Ruby and method overloading implemented in Google's Go scripting language.&lt;br /&gt;
&lt;br /&gt;
* Encapsulation : This object oriented feature helps scripting languages in structuring the methods and member data having same type of functionality to be defined in one class or interface. However, not all scripting languages support this feature but most of them do support. Python is one of the language that does not support encapsulation. Ruby and Perl do support encapsulation.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Advantages incorporated by scripting to OO languages''' ==&lt;br /&gt;
* Scripts are easy to use and learn.&lt;br /&gt;
&lt;br /&gt;
* Scripting requires minimum programming knowledge or experience. &lt;br /&gt;
&lt;br /&gt;
* At times scripting can do the same task in fewer LOC compared to OO Languages. For instance to sort a list using an OO language would require the user to code the procedure that might take approximately 25-30 LOC. However in a scripting language such as Perl using a command called “sort” within the script will perform the same task in 3-4 lines [http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm] &lt;br /&gt;
&lt;br /&gt;
* Scripting allows faster editing and code running. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Features of Scripting languages that are not in OO Languages''' ==&lt;br /&gt;
* Scripting languages do not enforce type declaration unlike the OO Languages  &lt;br /&gt;
&lt;br /&gt;
* In scripting languages such as Perl one can define an array using @ and insert any number of elements in the list. However in OO languages you need to create an object first and then perform specific tasks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== '''Is scripting synonymous to dynamic typing''' ==&lt;br /&gt;
Yes scripting is synonymous to dynamic typing. As discussed earlier one need not specify the type of variable used in scripting. The compiler determines the context of the variable and uses it accordingly at run time. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$a=4;&amp;lt;br /&amp;gt;&lt;br /&gt;
$a=3.16;&amp;lt;br /&amp;gt;&lt;br /&gt;
$b=4.56 + $a;&amp;lt;br /&amp;gt;&lt;br /&gt;
$c=5 + $a;&amp;lt;br /&amp;gt;&lt;br /&gt;
print $b;&amp;lt;br /&amp;gt;&lt;br /&gt;
print $c;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value stored in $b will be 7.72 and for $c will store 9.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
{{reflist}}&lt;br /&gt;
&amp;lt;!--- After listing your sources please cite them using inline citations and place them after the information they cite. Please see http://en.wikipedia.org/wiki/Wikipedia:REFB for instructions on how to add citations. ---&amp;gt;&lt;br /&gt;
1 http://en.wikipedia.org/wiki/Procedural_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
2 http://en.wikipedia.org/wiki/Object_(computer_science)&amp;lt;br /&amp;gt;&lt;br /&gt;
3 http://en.wikipedia.org/wiki/Class_(computer_programming)&amp;lt;br /&amp;gt;&lt;br /&gt;
4 http://en.wikipedia.org/wiki/Subroutine &amp;lt;br /&amp;gt;&lt;br /&gt;
5 http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming &amp;lt;br /&amp;gt;&lt;br /&gt;
6 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
7 http://en.wikipedia.org/wiki/Abstraction_(computer_science) &amp;lt;br /&amp;gt;&lt;br /&gt;
8 http://en.wikipedia.org/wiki/Encapsulation_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
9 http://www.webopedia.com/TERM/S/scripting_language.html &amp;lt;br /&amp;gt; &lt;br /&gt;
10 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
11 http://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming) &amp;lt;br /&amp;gt;&lt;br /&gt;
12 http://en.wikibooks.org/wiki/Java_Programming/Access_Modifiers &amp;lt;br /&amp;gt;&lt;br /&gt;
13 http://www.sqa.org.uk/e-learning/ClientSide01CD/page_22.htm &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Aakalker</name></author>
	</entry>
</feed>