Apart from running regular daily standup meetings with development/engineering team, it is important to run Program Status Meeting involving engineering, program management, product management , sponsor and other important stakeholders.
It is important to use program management plan in program management tools and/or deck.
Purpose of this meeting is to under how we are tracking towards our deadlines. Also align on the program progress, address roadblocks and discuss next steps. This also helps brainstorm solutions to program roadblocks.
The frequency of Program Status Meetings can be weekly, every 2 or 3 weeks or 1 month depending upon program complexity and stakeholder alignment. Ideally Program Status meeting should occur in weekly or every 2 weeks frequency. Decide on frequency at program kickoff/start and maintain and hold these meetings as per frequency
Program Manager should start with Status of Program. Status of Program can be Green, Yellow and Red. If Status of Program is Yellow and Red, mention corrective actions.
Green: On schedule, on budget, all good.
Yellow: Potential issues with schedule or budget, but both can probably be saved with corrective actions.
Red: Serious issues and the project will probably be delayed or have significant budget overrun.
Start the meeting by going over Program Gantt Chart. Program Manager goes over current week program activities planned from Gantt chart and highlights the stage the program is. Program Manager should clearly state whether the program is in Design, Development, Testing , Deployment or Support phase. Program Manager should clearly highlight all dependencies for current and next week. Program Manager should also highlight major deadlines and milestones in the future weeks
Program Manager or Scrum Masters of different teams share their team updates. Updates should include what team did since the last time they met, what team will do till the next time they meet and any blockers or obstacles.
Provide Status Update on RAID items and Capture new RAID items – RAID stands for Risk, Assumption, Issue and Dependency. Program Manager should review and share an update on existing Risks, Assumptions, Issues and Dependencies. Program Managers should also add new Risks, Assumptions, Issues and Dependencies to RAID backlog. Program Manager can also use this time to solve issues/roadblocks and also to remove risks/obstacles that can occur in future.
Program Manager should then go over next steps. Next Steps should highlight next week program activities, steps to resolve roadblocks if any.
After Status meeting is done, program manager should send Program Status update email which should include :
Object-oriented programming (OOP) is a programming paradigm based on the concept of “objects”, which can contain data and code: data in the form of fields (often known as attributes or properties), and code, in the form of procedures (often known as methods)
Object-oriented programming aims to implement real-world entities like inheritance, hiding, polymorphism etc in programming. The main aim of OOP is to bind together the data and the functions that operate on them so that no other part of the code can access this data except that function.
Java Classes/Objects
Java is an object-oriented programming language.
Everything in Java is associated with classes and objects, along with its attributes and methods. For example: in real life, a car is an object. The car has attributes, such as model and color, and methods, such as drive and brake.
A Class is like an object constructor, or a “blueprint” for creating objects.
What is a Class?
A class is a blueprint or prototype that defines the variables and the methods (functions) common to all objects of a certain kind.
Create a Java Class
To create a class, use the keyword class:
Create a class named “Car” with a variable model and colour:
public class Car{
string model;
string colour;
}
What is an Object?
An object is a representative or specimen of a class. Software objects are often used to model real-world objects you find in everyday life.
Create a JAVA Object
In Java, an object is created from a class. We have already created the class named Car, so now we can use this to create objects.
To create an object of Car, specify the class name, followed by the object name, and use the keyword new:
Car myCar = new Car();
Examples of class and objects
Class
Objects
Fruit
Apple Banana Mango
Car
Volvo Audi Toyota
Examples – Class and Objects
Features of OOPs :
Abstraction
Abstraction is the process of exposing the relevant things and hiding the irrelevant details. The easiest way to understand and appreciate this concept of handling complexity is by studying the example of Globe, a model/prototype of earth that is used by students to understand its geography. Globe provides only that information that is required and if too much of information is mentioned in it i.e. streets, lakes etc, it becomes too complex to comprehend. Hence Globe abstracts unwanted information and makes it easy to comprehend the complex earth.
JAVA Abstract Classes and Methods
Data abstraction is the process of hiding certain details and showing only essential information to the user. Abstraction can be achieved with either abstract classes or interfaces (which you will learn more about in the next chapter).
The abstract keyword is a non-access modifier, used for classes and methods:
Abstract class: is a restricted class that cannot be used to create objects (to access it, it must be inherited from another class).
Abstract method: can only be used in an abstract class, and it does not have a body. The body is provided by the subclass (inherited from).
An abstract class can have both abstract and regular methods:
abstract class Animal {
public abstract void animalSound();
public void sleep() {
System.out.println("Zzz");
}
}
From the example above, it is not possible to create an object of the Animal class:
Animal myObj = new Animal(); // will generate an error
To access the abstract class, it must be inherited from another class. Let’s convert the Animal class we used in the Polymorphism chapter to an abstract class:
Remember from the Inheritance chapter that we use the extends keyword to inherit from a class.
Example
// Abstract class
abstract class Animal {
// Abstract method (does not have a body)
public abstract void animalSound();
// Regular method
public void sleep() {
System.out.println("Zzz");
}
}
// Subclass (inherit from Animal)
class Pig extends Animal {
public void animalSound() {
// The body of animalSound() is provided here
System.out.println("The pig says: wee wee");
}
}
class Main {
public static void main(String[] args) {
Pig myPig = new Pig(); // Create a Pig object
myPig.animalSound();
myPig.sleep();
}
}
Encapsulation
Encapsulation is the mechanism that binds together code and the data it manipulates, and keeps both safe from outside interference and misuse. The data is not accessible to the outside world and only those functions that are wrapped in the class can access it. These functions provide the interface between the object’s data and the program. The insulation of the data from the direct access by the program is called data hiding. In OOP, code and data are merged into an object so that the user of an object can never peek inside the box. This is defined as encapsulation (Object is a capsule encapsulating data and behavior). All communication to it is through messages (function calls which we use to communicate to the object). Messages define the interface to the object. Everything an object can do is represented by its message interface. Therefore, we need not know anything about what is in the object when we use it.
JAVA Encapsulation
The meaning of Encapsulation, is to make sure that “sensitive” data is hidden from users. To achieve this, you must:
declare class variables/attributes as private
provide public get and set methods to access and update the value of a private variable
Get and Set
You learned from the previous chapter that private variables can only be accessed within the same class (an outside class has no access to it). However, it is possible to access them if we provide public get and set methods.
The get method returns the variable value, and the set method sets the value.
Syntax for both is that they start with either get or set, followed by the name of the variable, with the first letter in upper case:
Example
public class Person {
private String name; // private = restricted access
// Getter
public String getName() {
return name;
}
// Setter
public void setName(String newName) {
this.name = newName;
}
}
Example explained
The get method returns the value of the variable name.
The set method takes a parameter (newName) and assigns it to the name variable. The this keyword is used to refer to the current object.
However, as the name variable is declared as private, we cannot access it from outside this class:
Example
public class Main {
public static void main(String[] args) {
Person myObj = new Person();
myObj.name = "John"; // error
System.out.println(myObj.name); // error
}
}
Inheritance
Inheritance is the process by which one class acquires the properties and functionalities of another class. This is important because it supports the concept of hierarchical classification.. Inheritance provides the idea of reusability of code and each sub class defines only those features that are unique to it.
Java Inheritance (Subclass and Superclass)
In Java, it is possible to inherit attributes and methods from one class to another. We group the “inheritance concept” into two categories:
subclass (child) – the class that inherits from another class
superclass (parent) – the class being inherited from
To inherit from a class, use the extends keyword.
In the example below, the Car class (subclass) inherits the attributes and methods from the Vehicle class (superclass):
Example
class Vehicle {
protected String brand = "Ford"; // Vehicle attribute
public void honk() { // Vehicle method
System.out.println("Tuut, tuut!");
}
}
class Car extends Vehicle {
private String modelName = "Mustang"; // Car attribute
public static void main(String[] args) {
// Create a myCar object
Car myCar = new Car();
// Call the honk() method (from the Vehicle class) on the myCar object
myCar.honk();
// Display the value of the brand attribute (from the Vehicle class) and the value of the modelName from the Car class
System.out.println(myCar.brand + " " + myCar.modelName);
}
}
Did you notice the protected modifier in Vehicle?
We set the brand attribute in Vehicle to a protected access modifier. If it was set to private, the Car class would not be able to access it.
Why And When To Use “Inheritance”?
– It is useful for code reusability: reuse attributes and methods of an existing class when you create a new class.
Tip: Also take a look at the next chapter, Polymorphism, which uses inherited methods to perform different tasks.
The final Keyword
If you don’t want other classes to inherit from a class, use the final keyword:
If you try to access a final class, Java will generate an error:
final class Vehicle {
...
}
class Car extends Vehicle {
...
}
The output will be something like this:Main.java:9: error: cannot inherit from final Vehicle class Main extends Vehicle { ^ 1 error)
Polymorphism
Polymorphism is a feature that allows one interface to be used for a general class of actions. An operation may exhibit different behavior in different instances. The behavior depends on the types of data used in the operation. It plays an important role in allowing objects having different internal structures to share the same external interface. Polymorphism is extensively used in implementing inheritance. Ex: add(int a, int b) add(int a, float b, int c) add(int a, int b, float c, double d) Here different datatypes are being added using the same interface.
Java Polymorphism
Polymorphism means “many forms”, and it occurs when we have many classes that are related to each other by inheritance.
Like we specified in the previous chapter; Inheritance lets us inherit attributes and methods from another class. Polymorphism uses those methods to perform different tasks. This allows us to perform a single action in different ways.
For example, think of a superclass called Animal that has a method called animalSound(). Subclasses of Animals could be Pigs, Cats, Dogs, Birds – And they also have their own implementation of an animal sound (the pig oinks, and the cat meows, etc.):
Example
class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
}
class Pig extends Animal {
public void animalSound() {
System.out.println("The pig says: wee wee");
}
}
class Dog extends Animal {
public void animalSound() {
System.out.println("The dog says: bow wow");
}
}
Remember from the Inheritance chapter that we use the extends keyword to inherit from a class.
Now we can create Pig and Dog objects and call the animalSound() method on both of them:
Example
class Animal {
public void animalSound() {
System.out.println("The animal makes a sound");
}
}
class Pig extends Animal {
public void animalSound() {
System.out.println("The pig says: wee wee");
}
}
class Dog extends Animal {
public void animalSound() {
System.out.println("The dog says: bow wow");
}
}
class Main {
public static void main(String[] args) {
Animal myAnimal = new Animal(); // Create a Animal object
Animal myPig = new Pig(); // Create a Pig object
Animal myDog = new Dog(); // Create a Dog object
myAnimal.animalSound();
myPig.animalSound();
myDog.animalSound();
}
}
In procedural programming, program is divided into small parts called functions. Example code : #include <stdio.h> /*this function computes the absolute value of a whole number.*/ int abs(int x) { if (x>=0) return x; elsereturn -x; } /*this program calls the abs() function defined above twice.*/ int main() { int x, printf(” x=”); scanf(“%d”, &x); printf(“Absolute Value of x is %d. \n”, abs(x)); return 0; }
In object oriented programming, program is divided into small parts called objects. Example code :
class Parrot: # class attribute species = "bird" # instance attribute def __init__(self, name, age): self.name = name self.age = age instantiate the Parrot class blu = Parrot(“Blu”, 10) woo = Parrot(“Woo”, 15) access the class attributes print(“Blu is a {}”.format(blu.class.species)) print(“Woo is also a {}”.format(woo.class.species)) access the instance attributes print(“{} is {} years old”.format( blu.name, blu.age)) print(“{} is {} years old”.format( woo.name, woo.age))
Procedural programming follows top down approach. Note: A top-down approach is essentially the breaking down of a program to gain insight into its compositional small program (or module) in a reverse engineering fashion.
Object oriented programming follows bottom up approach. Note : A bottom-up approach is the piecing together of module (or small program) to give rise to more complex program, thus making the original modules of the emergent program.
There is no access specifier in procedural programming.
Object oriented programming have access specifiers like private, public, protected etc.
Adding new data and function is not easy.
Adding new data and function is easy.
Procedural programming does not have any proper way for hiding data so it is less secure.
Object oriented programming provides data hiding so it is more secure.
In procedural programming, overloading is not possible.
Overloading is possible in object oriented programming. Overloading methods lets you define the same method multiple times so that you can call them with different argument lists (a method’s argument list is called its signature)
In procedural programming, function is more important than data.
In object oriented programming, data is more important than function.
Procedural programming is based on unreal world.
Object oriented programming is based on real world.
Data can move freely from procedure to procedure in the system
Objects can move and communicate with each other through member functions
Examples: C, FORTRAN, Pascal, Basic etc.
Examples: C++, Java, Python, C# etc.
Difference between Procedural and Object Oriented Programming
Which function in Pandas library allows to manipulate data and create new variables?
apply function
Which Python libraries provides advanced random number capabilities?
NumPy
What is the output of the below Python code? import numpy as np percentiles = [34, 66.37, 45.55, 60, 89] first_subject = np.array(percentiles) print(first_subject.dtype)
float64
Which method is used to find the best fit line for data in Linear Regression?
Least Square Error
State True or False : Linear regression is sensitive to outliers?
CLS stands for Common Language Specification. It is subset of CTS . It defines rules that governs the interoperability of languages. All .NET compliant languages should adhere to CLS .